leecode 22 括號生成
阿新 • • 發佈:2022-03-29
22. 括號生成
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例 1:
輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
輸入:n = 1
輸出:["()"]
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/generate-parentheses
思路:遞迴
public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<String>(); generate(0,0,list,"",n); return list; } public void generate(int left ,int right ,List list,String st, int n){ if(left>n||right>n){ return; } if(left==n&&right==n){ list.add(st); } if(left>=right){ generate(left+1,right,list,st+'(',n); generate(left,right+1,list,st+')',n); } }
傳入left,right,list,st,n
- left記錄 '(' 個數
- right記錄')'個數
- list儲存存在的結果
- st為可能的字串
- n為生成括號的對數
當任意一種括號數大於n時返回這樣避免”((((“,"))))"等情況產生,當兩者個數等於n時表明此時的st為可能解。
left>=right時,進行遞迴,這樣避免”(()))(“等情況產生