LeetCode22. 括號生成 藍橋杯括號生成類問題

問題

數字 n 代表生成括號的對數,請你設計一個函數,用於能夠生成所有可能的並且 有效的 括號組合。
示例:

輸入:n = 3
輸出:[
       "((()))",
       "(()())",
       "(())()",
       "()(())",
       "()()()"
     ]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/generate-parentheses
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解決思路

其實每一次都相當於是在新的一位置上進行添加括號,而當前可添加的括號主要取決於之前已經放置的左括號。如果沒
有足夠的左括號與右括號匹配,則無法添加右括號,或,右括號已經用光了,但這種情況不可能出現。

代碼

class Solution {
    static List<String> list=new ArrayList<String>();
    public List<String> generateParenthesis(int n) {
        list.clear();
        recursion(n,n,0,"");
        return list;
    }
    public static void recursion(int left,int right,int canGo,String str){
        if(left==0&&right==0){
            list.add(str);return;
        }
        if(left<0||right<0)return ;
        if(left>0){
            recursion(left-1,right,canGo+1,str+"(");
        }
        if(right >0&&canGo>0){
            recursion(left,right-1,canGo-1,str+")");
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章