【发布时间】:2022-11-27 04:57:19
【问题描述】:
我在 LeetCode 问题中来到这个code
class Solution:
def maxProduct(self, root):
self.res = total = 0
def s(root):
if not root: return 0
left, right = s(root.left), s(root.right)
self.res = max(self.res, left * (total - left), right * (total - right))
return left + right + root.val
total = s(root)
s(root)
return self.res % (10**9 + 7)
我将 self.res 更改为 res,如下所示
class Solution:
def maxProduct(self, root):
res = total = 0
def s(root):
if not root: return 0
left, right = s(root.left), s(root.right)
res = max(res, left * (total - left), right * (total - right))
return left + right + root.val
total = s(root)
s(root)
return res % (10**9 + 7)
并且代码中断为UnboundLocalError: local variable 'res' referenced before assignment。为什么res必须初始化为self.res而total不需要?
【问题讨论】:
-
请使用您
"change self.res to res"的备用代码和相应的完整错误回溯更新您的问题,以帮助我们理解您的意思。 -
是的,我认为在这种情况下,您将需要
def s(root):内的nonlocal res。 mCoding 的这个广泛的video 解释了 python 中的范围规则。