题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
代码
DFS
用深度优先遍历来做,对于给的数字n,显然我们可以使用n个(
和n个)
,只要还有可用的括号就添加进去。
得到所有可能的排列,再判断这个生成的括号是否有效且不是重复的,加入到最后返回的列表res中。
其中判断括号是否有效,可以参考:20 有效的括号
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res=[] # 记录全部结果
# 判断生成的括号是否有效
def is_effective(S):
stack=[]
for x in S:
if x=='(':
stack.append(x)
else:
if stack!=[] and stack[-1]=='(':
stack.pop()
else:
return False
if len(stack)==0:
return True
def DFS(S):
# 全部括号都已经生成,结束递归
if len(S)==n*2:
# 判断生成的括号是否有效且不重复
if S not in res and is_effective(S):
res.append(S)
return 'finish'
else:
# 还可以加入左括号
if S.count('(')<n:
tmp=S+'('
DFS(tmp)
# 还可以加入右括号
if S.count(')')<n:
tmp=S+')'
DFS(tmp)
DFS('')
return res