22. 括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解题思路:回溯算法。如果左括号有剩余,那么可以在path中添加左括号;如果右括号剩余数目大于左括号,那么可以在path中添加右括号。当左右括号剩余数目均为0时,将path添加到结果中。
Python3代码如下:
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
result = []
self.generateParenthesisHelper(result,'',n,n)
return result
def generateParenthesisHelper(self,result,path,left,right):
if left == 0 and right == 0:
result.append(path)
return
if left > 0:
self.generateParenthesisHelper(result,path+'(',left-1,right)
if left < right:
self.generateParenthesisHelper(result,path+')',left,right-1)