请查看以下leetcode问题: https://leetcode.com/problems/generate-parentheses/
在其中,您尝试使用一系列规则生成一系列圆括号,其中每个圆括号的外观应如下所示。
我知道两种方法,这些方法在功能上与我相同,但只有一种有效。我知道append会返回None并就地进行修改,但是我看不到它如何影响递归过程。
这是无效的代码:
class Solution:
def generate(self, output, temp, n):
if len(temp) == 2*n:
output.append(temp)
left_count = temp.count("(")
right_count = temp.count(")")
if left_count < right_count:
return
if left_count < n:
self.generate(output, temp.append("("), n)
if left_count > right_count:
self.generate(output, temp.append(")"), n)
def generateParenthesis(self, n: int) -> List[str]:
output = []
self.generate(output, ["("], n)
return output
此代码(使用concat)有效:
class Solution:
def generate(self, output, temp, n):
if len(temp) == 2*n:
output.append(temp)
left_count = temp.count("(")
right_count = temp.count(")")
if left_count < right_count:
return
if left_count < n:
self.generate(output, temp + "(", n)
if left_count > right_count:
self.generate(output, temp + ")", n)
def generateParenthesis(self, n: int) -> List[str]:
output = []
self.generate(output, "", n)
return output
有人可以澄清一下我在这里想念的吗?非常感谢。
答案 0 :(得分:1)
.append
返回None
而不是预期的附加列表。您想先将括号添加到temp
,然后使用“更新的” temp
作为参数。
class Solution:
def generate(self, output, temp, n):
if len(temp) == 2*n:
output.append(temp)
left_count = temp.count("(")
right_count = temp.count(")")
if left_count < right_count:
return
if left_count < n:
temp.append("(") # does not return anything but modifies temp.
self.generate(output, temp, n)
if left_count > right_count:
temp.append(")") # same.
self.generate(output, temp, n)
def generateParenthesis(self, n: int) -> List[str]:
output = []
self.generate(output, ["("], n)
return output