题解 | 括号生成

括号生成

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return string字符串ArrayList
     */
    //一个很神奇的思路,字符串的一个前缀必须是左括号的数量大于右括号的数量,同时必须以左括号开始 右括号结束  
    ArrayList<String> res = new ArrayList<String> ();
    public void generateStr(int left,int right,StringBuilder str,int n){
        if(left == n && right == n){
            res.add(str.toString()); 
        }
        //增加左括号的情况
        if(left<n && left>=right){
            str.append('(');
            generateStr(left+1,right,str,n);
            // 一定要有回溯操作,比如,我现在是((  我要去增加()的场景,一定是先要吧目前左括号移除才能继续
            str.deleteCharAt(str.length()-1);

        }
        //增加右括号的情况
        if(right<n && left>=right){
            str.append(')');
            generateStr(left,right+1,str,n);
            str.deleteCharAt(str.length()-1);

        }
        return;

    }
    public ArrayList<String> generateParenthesis (int n) {
        // write code here
        StringBuilder substr = new StringBuilder();
        generateStr(0,0,substr,n);
        return res;
    }
}

全部评论

相关推荐

uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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