題目描述:
給出 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