LeetCode 热题 HOT 100之括号生成
题目22:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
方案:用回溯法,结果为字符串的集合,回溯条件中,当字符串长度为2n时存入到结果数组中,两个指针表示单个字符串中左右括号的数量,只有左指针小于n时才可以添加左括号,当右指针小于左指针时加入有括号,否则不是有效括号组合。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def dfs(S, left, right):
if len(S) == 2 * n:
ans.append(''.join(S))
return
if left < n:
S.append('(')
dfs(S, left + 1, right)
S.pop()
if right < left:
S.append(')')
dfs(S, left, right + 1)
S.pop()
dfs([], 0, 0)
return ans