括號生成(kotlin)

2021-09-02 19:20:50 字數 828 閱讀 1064

給出 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 最長有效括號,這...