• LeetCode-22. 括号生成-Java-medium


    题目链接

    法一(dfs)

    public class Solution22 {
    
        private List<String> ans;
    
        public Solution22() {
            this.ans = new LinkedList<>();
        }
    
        /**
         * dfs
         *
         * @param left
         * @param right
         * @param curStr
         */
        private void dfs(int left, int right, String curStr) {
            if (left > right || left < 0 || right < 0) {
                return;
            }
            if (left == 0 && right == 0) {
                ans.add(curStr);
                return;
            }
            dfs(left - 1, right, curStr + "(");
            dfs(left, right - 1, curStr + ")");
        }
    
        /**
         * 法一(dfs)
         *
         * @param n
         * @return
         */
        public List<String> generateParenthesis(int n) {
            dfs(n, n, "");
            return ans;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    法二(回溯)

    public class Solution22 {
    
        private List<String> ans;
    
        public Solution22() {
            this.ans = new LinkedList<>();
        }
        
        /**
         * 回溯(更快)
         *
         * @param left
         * @param right
         * @param curStr
         */
        private void backtracking(int left, int right, StringBuilder curStr) {
            if (left == 0 && right == 0) {
                ans.add(curStr.toString());
                return;
            }
            if (left > 0) {
                curStr.append("(");
                backtracking(left - 1, right, curStr);
                curStr.deleteCharAt(curStr.length() - 1);
            }
            if (left < right) {
                curStr.append(")");
                backtracking(left, right - 1, curStr);
                curStr.deleteCharAt(curStr.length() - 1);
            }
        }
    
        /**
         * 法二(回溯)
         *
         * @param n
         * @return
         */
        public List<String> generateParenthesis_2(int n) {
            backtracking(n, n, new StringBuilder());
            return ans;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    本地测试

            /**
             * 22. 括号生成
             */
            lay.showTitle(22);
            Solution22 sol22_1 = new Solution22();
            List<String> ans22_1 = sol22_1.generateParenthesis(3);
            arrayOpt.showStringList(ans22_1);
            Solution22 sol22_2 = new Solution22();
            List<String> ans22_2 = sol22_2.generateParenthesis_2(3);
            arrayOpt.showStringList(ans22_2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Electron结合React和TypeScript进行开发
    网鼎杯初赛--web1
    一图看懂,阿里云飞天企业版如何支持政企数智创新
    Excel VBA高级编程-微信群发(支持发送文件)
    【小树T系列3D打印机安装教程】
    Coke(六):有趣的定时器任务
    CSS基础:盒子模型详解
    shuffle文件损坏导致nodemanager重启失败
    什么是数据管理能力成熟度评估(DCMM)
    IT行业的6大热门岗位,薪酬都有多高?
  • 原文地址:https://blog.csdn.net/qq_41829337/article/details/126237772