题解 |找到规律后的简单做法

括号生成

http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca

看了一圈好像没有用我这个方法的,感觉实现起来很方便
核心是抓住  一个合法序列插入另一个合法序列任意位置仍然合法  这条性质
那么规模为n的问题 转化为 对规模为n-1的问题插入一对新括号的问题
给出JAVA实现如下
public ArrayList<String> generateParenthesis (int n) {
        ArrayList<String> arr=new ArrayList<>();
        if(n==0) return null;
        // write code here
        //合法括号 不以)开头,不以(结尾
        //即()开头结尾
        //消去几个()后,仍应该保持这个性质,比如())不行
        //一个合法序列插入另一个合法序列任意位置仍然合法
        //问题转化成,从一个括号开始,用其他括号慢慢插
        String init="()";
        if(n==1){
            arr.add(init);
            return arr;
        }
        HashSet<String> set=new HashSet<>();
        ArrayList<String> lastRes=generateParenthesis(n-1);
        for(String item:lastRes){
                        //可插入空位个数枚举,2(n-1)+1=2n-1
            for(int i=0;i<2*n-1;i++){
                String prefix;
                if(i==0) prefix="";
                else prefix=item.substring(0,i);
                
                String end;
                if(i==2*n-2) end="";
                else end=item.substring(i);
                set.add(prefix+"()"+end);
            }
        }
        for(Iterator<String> it=set.iterator();it.hasNext();){
            arr.add(it.next());
        }
        return arr;
}


全部评论

相关推荐

我的人生算是废了,23届裸辞空档一年,存款只能坚持几个月了,找不到像样的工作了,人生何去何从。
梦想是成为七海千秋:这大环境下为什么要裸辞呀,风险真的挺大的,而且社招的话23届没有太多的竞争力,不过既然已经裸辞了就不要焦虑慢慢找。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务