题目描述:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
很明显应该利用递归来解决---即回溯。n对括号意味着左右括号各有n个,递归出口很明显是当代表左右的计数变量left和right 各达到n(反向减少到0也可以),代码的核心为判断条件,其中之一为例如当left先移动时就递增,但如果在递归过程中出现了right>left的情况,则判断为非法(例如"())这样的情况"),代码如下:
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = []
def backtrack(S = '', left = 0, right = 0):
if len(S) == 2 * n:
res.append(S)
return
if right < left:
backtrack(S+')', left, right+1)
if left < n:
backtrack(S+'(', left+1, right)
backtrack()
return res