1. 程式人生 > 其它 >leecode 22 括號生成

leecode 22 括號生成

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時,進行遞迴,這樣避免”(()))(“等情況產生