22 括號生成

22. 括號生成

數(shù)字 n 代表生成括號的對數(shù),請你設計一個函數(shù),用于能夠生成所有可能的并且 有效的 括號組合。
示例 1:
輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
輸入:n = 1
輸出:["()"]

思路

回溯先畫樹

image.png

遞歸出口
符合結果:當(的剩余個數(shù)==)的剩余個數(shù)==0時,得到一個解
剪枝條件:當)的剩余個數(shù) 多于 (的剩余個數(shù),是不符合要求的解,需要剪枝掉

代碼

class Solution {

    public List<String> generateParenthesis(int n) {
        List<String> res = new ArrayList<>();
        if (n == 0) {
            return res;
        }
        dfs("", n, n, res);
        return res;
    }

    private void dfs(String s, int leftLeft, int rightLeft, List<String> res) {
        if (rightLeft < leftLeft) {
            return;
        }
        if (rightLeft == 0 && leftLeft == 0) {
            res.add(s);
            return;
        }
//剛開始寫時候是嚴格按照回溯方法寫的,所以有個for循環(huán),后來看了答案,發(fā)現(xiàn)多余的
//        for (int i = 0; i<2; i++){
//            if (i == 0){
                if (leftLeft > 0) {
                    dfs(s + "(", leftLeft - 1 , rightLeft, res);
                }
//            }
//            else {
        if (rightLeft > 0)
                dfs(s + ")", leftLeft, rightLeft - 1 , res);
//            }
//        }

    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題目描述: 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。 例如,給出...
    LeeYunFeng閱讀 1,429評論 0 50
  • 題目描述 數(shù)字 n 代表生成括號的對數(shù),請你設計一個函數(shù),用于能夠生成所有可能的并且 有效的 括號組合。 示例 解...
    castlet閱讀 685評論 0 1
  • 問題描述 數(shù)字 n 代表生成括號的對數(shù),請你設計一個函數(shù),用于能夠生成所有可能的并且 有效的 括號組合。 示例: ...
    halapro_liu閱讀 247評論 0 1
  • 題目鏈接:https://leetcode-cn.com/problems/generate-parenthese...
    Jason_Shu閱讀 368評論 0 0
  • 夜鶯2517閱讀 128,194評論 1 9

友情鏈接更多精彩內容