給出 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打卡完畢
心情日記:youatfwus --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 ...