数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合
一开始的想法就是,生成所有可能的组合,然后再进行剪枝,把不符合的去掉。但是感觉有点麻烦。
再想,直接在生成的时候就可以添加限定条件。比如,左边的括号一定是先加进去,左右括号均小于n,为保证有效括号,每一次加入括号后右侧括号不会比左侧多。
每一个添加进去的括号的下一个选择有两个(加左括号,加右括号),进行递归。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def backtrack(S, left, right):
if len(S) == 2 * n:
ans.append(''.join(S))
return
if left < n:
S.append('(')
backtrack(S, left+1, right)
S.pop()
if right < left:
S.append(')')
backtrack(S, left, right+1)
S.pop()
backtrack([], 0, 0)
return ans