括号生成1
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
class Solution:
def generateParenthesis(self, n: int):
if n<=0:
return []
elif n==1:
return ['()']
s='('*n+')'*n
#s=''.join(sorted(s))
a=['']
d=[]
for b in s:
ta=[]
for c in a:
for i in range((c+b).index(b)+1):
ta.append(c[:i]+b+c[i:])
a=ta
for c in a:
if c[-1]==')' and c[0]=='(':
e=0
f='('
for g in c:
if f==g:
e+=1
else:
e-=1
if e==0:
f='('
elif e<0:
break
if e==0:
d.append(c)
return d
笔记:
全排列中,第一个为左括号、最后一个为右括号,且有效闭合括号对右边第一个为左括号的目标为解。
测试几次发现这个算法在n>10之后性能表现速降,而最快的递归提交范例类似结果则出现在n>12之后。
题目来源:力扣LeetCode ↩︎