美文网首页
每日一题:22. 括号生成

每日一题:22. 括号生成

作者: 北漂三十年 | 来源:发表于2023-03-04 22:31 被阅读0次

package com.ljp.test.leetcode;

import java.util.ArrayList;

import java.util.List;

/**

* <h2>22. 括号生成

*

* 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

*

*

* 示例 1:

*

* 输入:n = 3

* 输出:["((()))","(()())","(())()","()(())","()()()"]

* 示例 2:

*

* 输入:n = 1

* 输出:["()"]

*

* 提示:

*

* 1 <= n <= 8

*

* 来源:力扣(LeetCode)

* 链接:<a href="https://leetcode.cn/problems/generate-parentheses">22. 括号生成

* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

*/

public class Number0022{

    public static void main(String[] args) {

        System.out.println(BacktrackAndPruning.generateAllParentheses(1));

        System.out.println(BacktrackAndPruning.generateAllParentheses(2));

        System.out.println(BacktrackAndPruning.generateAllParentheses(3));

        System.out.println(BacktrackAndPruning.generateAllParentheses(4));

        System.out.println(BacktrackAndPruning.generateAllParentheses(5));

    }

    /**

    * 使用回溯算法和剪枝算法

    */

    private static class BacktrackAndPruning{

        public static List<String> generateAllParentheses(int n) {

            List<String> allParentheses =new ArrayList<>();

            backtrackAndPruning(allParentheses, new StringBuilder(), 0, 0, n);

            return allParentheses;

        }

        /**

        * 回溯算法和剪枝算法

        *

        * @param allParentheses 所有括号集合

        * @param parentheses    单个括号(值传递,复制的引用)

        * @param open          左括号(值传递)

        * @param close          右括号(值传递)

        * @param max            最大括号数

        */

        private static void backtrackAndPruning(List<String> allParentheses, StringBuilder parentheses, int open, int close, int max) {

            // 剪枝算法

            if (open > max || open < close) {

                return;

            }

            if (parentheses.length() == max *2) {

                allParentheses.add(parentheses.toString());

return;

            }

            // 回溯算法,左增加

            backtrackAndPruning(allParentheses, parentheses.append('('), open +1, close, max);

            // 回溯结束之后,StringBuilder置空

            parentheses.deleteCharAt(parentheses.length() -1);

            // 回溯算法,右增加

            backtrackAndPruning(allParentheses, parentheses.append(')'), open, close +1, max);

            // 回溯结束之后,StringBuilder置空

            parentheses.deleteCharAt(parentheses.length() -1);

        }

    }

}

相关文章

  • LeetCode-22. 括号生成

    参考:第7课-泛型递归、树的递归 LeetCode-22. 括号生成 22. 括号生成 数字 n 代表生成括号的对...

  • LeetCodeDay51 —— 括号生成★★☆

    22. 括号生成 描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。...

  • leetcode(python)22.括号生成

    22.括号生成 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,...

  • 22. 括号生成

    22. 括号生成[https://leetcode.cn/problems/generate-parenthese...

  • [day7] [LeetCode] [title22,3,26]

    22.括号生成 给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出...

  • 每周 ARTS 第 24 期

    1. Algorithm 22. 生成括号(中等) 描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能...

  • LeetCode:22. 括号生成

    问题链接 22. 括号生成[https://leetcode.cn/problems/generate-paren...

  • 22. 括号生成

    给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出n=3,生成结果...

  • 22. 括号生成

    知乎ID: 码蹄疾码蹄疾,毕业于哈尔滨工业大学。小米广告第三代广告引擎的设计者、开发者;负责小米应用商店、日历、开...

  • 22. 括号生成

    题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 ...

网友评论

      本文标题:每日一题:22. 括号生成

      本文链接:https://www.haomeiwen.com/subject/ktvcaltx.html