追加到列表与串联python递归调用

时间:2019-11-07 19:59:23

标签: python list recursion append concatenation

请查看以下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

有人可以澄清一下我在这里想念的吗?非常感谢。

1 个答案:

答案 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