【发布时间】:2021-01-18 21:10:35
【问题描述】:
下面的代码是生成平衡括号
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
self.backtrack(n, res, 0, 0, [])
return res
def backtrack(self, n, res, o, c, path):
print(o, c, path)
if len(path) == 2*n:
res.append("".join(path))
return
if o < n:
o += 1
self.backtrack(n, res, o, c, path + ['('])
if c < o:
c += 1
self.backtrack(n, res, o, c, path + [')'])
n = 3 时的打印输出是,
0 0 []
1 0 ['(']
2 0 ['(', '(']
3 0 ['(', '(', '(']
3 1 ['(', '(', '(', ')']
3 2 ['(', '(', '(', ')', ')']
3 3 ['(', '(', '(', ')', ')', ')']
3 1 ['(', '(', ')']
3 2 ['(', '(', ')', ')']
3 3 ['(', '(', ')', ')', ')']
2 1 ['(', ')']
3 1 ['(', ')', '(']
3 2 ['(', ')', '(', ')']
3 3 ['(', ')', '(', ')', ')']
3 2 ['(', ')', ')']
3 3 ['(', ')', ')', ')']
1 1 [')']
2 1 [')', '(']
3 1 [')', '(', '(']
3 2 [')', '(', '(', ')']
3 3 [')', '(', '(', ')', ')']
3 2 [')', '(', ')']
3 3 [')', '(', ')', ')']
2 2 [')', ')']
3 2 [')', ')', '(']
3 3 [')', ')', '(', ')']
3 3 [')', ')', ')']
我知道 3-3 之前发生了什么(第一个),但在那之后为什么 3-1 只得到 2 个左括号但 o 等于 3,起初我认为它是因为变量 o 已被设置之前递归的范围始终为 3,但后来 o 被视为等于 2,所以不是这样。
我知道列表和集合等数据结构中的这种行为,这就是为什么我在函数调用中添加项目以避免它们在每次递归调用时都被更改,但对于整数也是如此吗?这可以解释为什么当我在函数调用中执行 o + 1 时它会起作用。
有人可以对此进行复习吗!
谢谢
【问题讨论】:
标签: python python-3.x recursion scope integer