给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
回溯法:括号生成问题的两个重要性质:
- 一个「合法」括号组合的左括号数量一定等于右括号数量,这个显而易见
- 对于一个「合法」的括号字符串组合p,必然对于任何 都有:子串 中左括号的数量都大于或等于右括号的数量
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
# 保存合法结果
res = []
# 当前的括号序列
track = []
def backtrack(left, right, track):
# 递归出口
# 非法情况
if right < left: return
if left < 0 or right < 0: return
# 合法情况,保存结果
if left == 0 and right == 0:
res.append(''.join(track))
return
if left > 0:
track.append('(')
backtrack(left - 1, right, track)
track.pop()
if right > 0:
track.append(')')
backtrack(left, right - 1, track)
track.pop()
backtrack(n, n, track)
return res