22. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

DFS+剪枝:

  1. class Solution:
  2. def generateParenthesis(self, n: int) -> List[str]:
  3. ans = []
  4. def fun(ans, s, l, r, n):
  5. if l>n or r>n or r>l:
  6. return
  7. if l==n and r==n:
  8. ans.append(s)
  9. fun(ans, s+'(', l+1, r, n)
  10. fun(ans, s+')', l, r+1, n)
  11. return
  12. fun(ans, "", 0, 0, n)
  13. return ans

回溯:

  1. class Solution:
  2. def generateParenthesis(self, n: int) -> List[str]:
  3. ans = []
  4. def backtrack(S, left, right):
  5. if len(S) == 2 * n:
  6. ans.append(''.join(S))
  7. return
  8. if left < n:
  9. S.append('(')
  10. backtrack(S, left+1, right)
  11. S.pop()
  12. if right < left:
  13. S.append(')')
  14. backtrack(S, left, right+1)
  15. S.pop()
  16. backtrack([], 0, 0)
  17. return ans