括號生成 DFS

2021-10-04 20:42:04 字數 1106 閱讀 5803

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。

輸入示例:

3輸出示例:

[「((()))」,

「(()())」,

「(())()」,

「()(())」,

「()()()」

]

題目**於leetcode

public list

generateparenthesis

(int n)

讀題,發現需要解決的問題如下:

依次來解決這兩個問題,首先,需要知道有多少種組合。

起初,我以為有數學規律,但尋找後並沒有發現,於是,關於找組合數,我們就只能遍歷所有的括號可能,對於n個括號,我們需要生成2^2*n個字元,然後再從裡面選擇符合條件的。

然後看第二個問題,要生成這麼多符合條件的,還需要新增到乙個字串陣列裡面,最好的辦法就是遞迴,列舉所有的可能。

但仔細一想,我們其實並沒有必要列舉所有可能,我們只需要按照一定的方式去生成左右括號,就可以保證每個生成的括號都是有效的,我們可以思考一下具體生成括號的方式:

這其實就是乙個dfs的思想。

class

solution

public

void

dfs(

int left,

int right,string cur)

if(left>0)

dfs(left-

1,right,cur+

"(");if

(right>left)

dfs(left,right-

1,cur+

")");}

}

leetcode-4.9打卡完畢

心情日記:you

atfwus --writing by 2020–04-09

括號生成(kotlin)

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 這個問題第一反應是暴力窮舉。n為幾,就建立幾對括號,然後排列組合,去掉重複和無效的。例如n 1,就是生成兩組 括號,編號為a1 a2 可能的組合就是兩組 a1 a2 a2 a1 ...

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 ...