leetcode 022. 括号生成
2019-01-01 本文已影响3人
阳光树林
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = __3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
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)