美文网首页
leetcode 022. 括号生成

leetcode 022. 括号生成

作者: 阳光树林 | 来源:发表于2019-01-01 19:53 被阅读3次

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

    例如,给出 n = __3,生成结果为:
    [
    "((()))",
    "(()())",
    "(())()",
    "()(())",
    "()()()"
    ]

    Image.png

    code:

    # 使用递规来求解,当右括号多于左括号的时候,就不符合条件了进行剪枝
    class Solution:
        def generateParenthesis(self, n):
            if n == 0:
                return []
            result = []
            self.helper(n, n, '', result)
            return result
    
        def helper(self, l, r, item, result):
            # 当剩余左括号大于右括号,说明右括号大于左括号,就不符合条件了
            if l > r:
                return
            if l == r == 0:
                result.append(item)
            # 左括号大于0,就增加一个左括号
            if l > 0:
                self.helper(l - 1, r, item + '(', result)
            # 右括号大于0,就增加一个右括号
            if r > 0:
                self.helper(l, r - 1, item + ')', result)
    

    相关文章

      网友评论

          本文标题:leetcode 022. 括号生成

          本文链接:https://www.haomeiwen.com/subject/rckolqtx.html