zoukankan      html  css  js  c++  java
  • lintcode: 生成括号

     生成括号

    给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

    样例

    给定 n = 3, 可生成的组合如下:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    解题

    参考链接

    采用递归树的思想

    left: 左括号的数量

    right:右括号数量

    n:括号的对数

    当left == n:表示左括号已经到达最大值了,只能添加右括号

    当left >= right: 表示左括号数量 小于 右括号数量,可以添加左括号 也可以添加右括号

    当left < right or left >n or right >n : 非法操作

    public class Solution {
        /**
         * @param n n pairs
         * @return All combinations of well-formed parentheses
         */
        public ArrayList<String> generateParenthesis(int n) {
            // Write your code here
            ArrayList<String> result  = new ArrayList<String>();
            if(n<=0)
                return result;
            int left = 0,right=0;
            String str="";
            generateParenthesis(n,left,right,str,result);
            return result;
        }
        public void generateParenthesis(int n,int left,int right,String str ,ArrayList<String> result){
            if(left >n || right >n || left < right)
                return;
            if(left == n){
                for(int i=0;i< n- right;i++)
                    str+=")";
                result.add(str);
                return;
            }
              
            // left>=right  
            generateParenthesis(n, left+1, right,str+"(",result);
            generateParenthesis(n, left, right+1,str+")",result); 
            
        }
    }

    下面的程序参考上面博客链接中,感觉判断添加是不是少了。

    public class Solution {
        /**
         * @param n n pairs
         * @return All combinations of well-formed parentheses
         */
        public ArrayList<String> generateParenthesis(int n) {
            // Write your code here
            ArrayList<String> result  = new ArrayList<String>();
            if(n<=0)
                return result;
            int left = 0,right=0;
            String str="";
            generateParenthesis(n,left,right,str,result);
            return result;
        }
        public void generateParenthesis(int n,int left,int right,String str ,ArrayList<String> result){
            if(left == n){
                for(int i=0;i< n- right;i++)
                    str+=")";
                result.add(str);
                return;
            }
            generateParenthesis(n, left+1, right,str+"(",result);  
            if(left>right){  
                generateParenthesis(n, left, right+1,str+")",result); 
            }  
        }
    }
  • 相关阅读:
    JavaScript数组去重(12种方法,史上最全转载)
    数组从大到小排序的两种方式
    jquery.inArray()和splice()使用小记
    HbuilderX 线上打包Android9.0版本无法更新
    常见的移动端H5页面开发遇到的坑和解决办法
    监听点击物理返回键及mui.fire父子页面传参
    深入理解DOM事件类型系列第三篇——变动事件
    jquery监听div等元素的内容变化
    寒假进度3
    寒假进度2
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5349547.html
Copyright © 2011-2022 走看看