原題
給定 n 對括號,請寫一個函數以將其生成新的括號組合,并返回所有組合結果。
樣例
給定 n = 3, 可生成的組合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
解題思路
- 求所有的組合,遞歸, backtracking
- left,right分別代表左括號和右括號還剩幾個 - 規則就是:任何時候剩余的右括號都要大于等于左括號
- 當left和right都等于零的時候,向result中添加一個可行解
完整代碼
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = []
if n < 1:
return res
self.helper(n, n, "", res)
return res
def helper(self, left, right, path, res):
if left > right:
return
if left == 0 and right == 0:
res.append(path)
if left > 0:
self.helper(left - 1, right, path + "(", res)
if right > 0:
self.helper(left, right - 1, path + ")", res)