给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
分析
递归求每一种情况即可,设当‘(’没用光时,下一个符号可为‘(’,当‘(’的数量比‘)’多时,下一个符号可为‘)’
代码
设函数help
help(s,a,b,l,n)
a为‘(’的数量,b为‘)’的数量,s为储存结果的字符串
n表示有n个‘(’和n个‘)’可用,当这些符号都用光时,则表示已经有一个有效的结果生成
if(a==n and b==n):
l.append(s)
return
下一个符号的可能有两种,将两种全部统计即可
当‘(’的数量小于等于n时,表示还有‘(’可用
if(a<=n):help(s+'(',a+1,b,l,n);
当‘(’的数量大于‘)’时,下一个符号可为‘)’
if(a>b):help(s+')',a,b+1,l,n)
结果
def generateParenthesis(self, n):
l=[]
self.help('',0,0,l,n)
return l
def help(self,s,a,b,l,n):
if(a==n and b==n):
l.append(s)
return
if(a<=n):self.help(s+'(',a+1,b,l,n);
if(a>b):self.help(s+')',a,b+1,l,n)