【每日一題-leetcode】22.括號生成

22.括號生成

  1. 括號生成

難度中等969

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

示例:

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

時間:O(2^n)

思路:如果遞歸生成括號,會出現很多無效的括號,因此 在遞歸的過程中過濾掉一些不符合條件的括號。規律就是 生成n 也就是2n個括號 由於都是小括號,因此 左括號 和右括號 應該是相等的。如果left < n 繼續 遞歸 由於一個右括號應該匹配一個左括號 當左括號 > 右括號 遞歸 當left 和 right == n的時候就停止 返回。

private List<String> result;//存儲結果
    
        public List<String> generateParenthesis(int n) {
            result = new ArrayList<String>();
            generate("",0,0,n);
            return result;
        }
        //在recursion中過濾掉不符合條件的括號。
        public void generate(String str,int left,int right,int n){
            //終止條件
            if(left == n && right == n){
                result.add(str);
                return;
            }
            if(left < n){
                generate(str+"(",left+1,right,n);
            }
            if(left > right){
                generate(str+")",left,right+1,n);
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章