0
点赞
收藏
分享

微信扫一扫

leetcode22.括号生成

MaxWen 2022-01-22 阅读 35
算法

刚拿到这个题没有头绪,感觉好难啊(自己做题少,经验少)

我就死看答案,啥也看不懂!!!

后来自己研究,包括查看B站找到了思路

刚开始我的思路很乱总想着括号同时从两边添加,左右开弓,这样是很不好思考的

思路图解(借的B站的图,我自己画的太丑了):

代码:

 public static void main(String[] args) {
        int n = 3;
        System.out.println(generateParenthesis(n));
    }
    public static List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList<>();
        StringBuilder cur = new StringBuilder();
        back(ans,cur,0,0,n);
        return ans;
    }
    public  static void back(List<String> ans,StringBuilder cur,int left,int right,int n){
        if(cur.length() == 2 * n){
            ans.add(cur.toString());
            return;
        }
        if(left < n){//左括号数量小于n
            cur.append("(");
            back(ans,cur,left+1,right,n);
            //System.out.println(cur.deleteCharAt(cur.length() - 1));
            cur.deleteCharAt(cur.length() - 1);
        }
        if (right < left) {//右括号数量小于左括号
            cur.append(')');
            back(ans, cur, left, right + 1, n);
            //System.out.println(cur.deleteCharAt(cur.length() - 1));
            cur.deleteCharAt(cur.length() - 1);
        }
    }

代码中的两个if中都有一段相同的代码:cur.deleteCharAt(cur.length() - 1);

这断代码的意思是什么?

其实就是一次递归完成后回溯用的

大家可以debug一步一步的跟一下,就理解了

举报

相关推荐

0 条评论