题目描述
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解题思路与代码
通过一个变量left_nums来表示当前括号串中’(‘的数量,n则表示剩余需要添加到该括号串中的符号的数量。当n=0时,函数检查当前left_nums是否为0,如果是则将该括号串加入list中;反之则什么也不做。当n>0时,同样检查left_nums是否为0,如果为0,则表示当前该括号串右括号和左括号恰好匹配,所以只能在括号串末尾加一个’(‘,继续递归调用该函数;反之分成两支递归调用(分别添加”(“和”)”)。
代码如下:
class Solution(object):
def generateParenthesis(self, n):
self.List = []
self.auxiliaryFunc(0,n,'')
return self.List
def auxiliaryFunc(self,left_nums,n,str_item):
if n==0:
if left_nums==0:
self.List.append(str_item)
elif left_nums==0:
self.auxiliaryFunc(1,n-1,str_item+'(')
else:
self.auxiliaryFunc(left_nums+1,n-1,str_item+'(')
self.auxiliaryFunc(left_nums-1,n-1,str_item+')')