• 【每日一题-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);
                }
            }
    
  • 相关阅读:
    2016.7.22.noip2012D2
    2016.7.21.noip2014D2
    LIS最长上升子序列O(n^2)与O(nlogn)的算法
    vijos1910解方程
    vijos1909寻找道路
    viojs1908无线网路发射器选址
    P1907飞扬的小鸟
    P1906联合权值
    P1905生活大爆炸版 石头剪刀布
    poj1274(匈牙利算法)
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860637.html
Copyright © 2020-2023  润新知