【每日一题-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);
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章