給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n =3,生成結果為:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
這個問題第一反應是暴力窮舉。n為幾,就建立幾對括號,然後排列組合,去掉重複和無效的。
例如n=1,就是生成兩組() 括號,編號為a1( a2)
可能的組合就是兩組
a1--a2 ( )
a2--a1 )(
第二組無效,去掉。只剩第一組()
例如n=2,就是生成兩組() 括號,編號為a1 a2 ,b1 b2
可能的組合就有
a1 a2 b1 b2 () ()
等24中組合
推倒到n=2時已經發現可能性膨脹的過於厲害,所以直接pass這種方案。
google一下,有人提出深度優先遍歷dfs方法。(牛人真多)
把自己的理解和體會記錄一下。
這種方法就相當於去取括號。n=1,就是從一組()裡面取。
n=2就是從()()裡面取
n=3就是從()()()裡面取。如下圖所示。取的時候需要注意,右括號的數量不能超過左括號
等畫出來這個圖,是不是發現特別像二叉樹?
下面是具體的kotlin**
測試通過
leetcode 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 回溯法 遞迴每次填入的要麼是 要麼是 當然,第乙個肯定是 並且 的數目不會超過 記錄左括號和右括號的數量,當分別達到n時即為合格的狀態,可以壓入vector,當然為了去重最好先用...
22 括號生成
參考回溯法 1.class solution def init self self.ans list defgenerateparenthesis self,n int self.parenthesisiter n,0,return self.ans list defparenthesisiter ...
22 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 在leetcode中有關括號的題共有三道,除了這一道的另外兩道是valid parentheses 驗證括號和longest valid parentheses 最長有效括號,這...