一、题设
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
二、基本思路
递归,当左括号个数没满时,可以加一个左括号,并把记录左括号的个数的变量+1;当右括号的数量比左括号数量小时,可以加一个右括号,并把记录右括号个数的变量+1,以此递推。当当前字符串个数为2n时回归。
三、代码实现
def generateParenthesis(self, n):
# res列表存放最终结果
res = []
# 递归开始
# str 记录小数组,left记录左括号个数,right记录右括号个数
def gennerate(str,left,right):
# 回归条件:如果str已经存了2n的个数
if len(str) == 2 * n:
# 将小数组加入结果数组中
res.append(''.join(str))
# 左括号没满加左括号
if left < n:
str.append('(')
gennerate(str,left+1,right)
str.pop()
# 右括号没满加右括号
if left > right:
str.append(')')
gennerate(str,left,right+1)
str.pop()
# 调用递归
gennerate([],0,0)
return res
四、效率总结
递归效率一般都不高,但好在代码量少,思考简单。