美文网首页
22.括号生成

22.括号生成

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-12-20 17:04 被阅读0次

    题目描述:

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

    示例:

    例如,给出 n = 3,生成结果为:
    [
    "((()))",
    "(()())",
    "(())()",
    "()(())",
    "()()()"
    ]

    解答:

    回溯法

    public static List<String> generateParenthesis(int n) {
            List<String> rs = new ArrayList<>();
            // 回溯法
            backtrack(rs, "", 0, 0, n);
            return rs;
        }
    
        private static void backtrack(List<String> rs, String current, int open, int close, int n) {
            // 一个字符串长度=对数*2
            if (current.length() == n * 2) {
                // 添加一个字符串
                rs.add(current);
                return;
            }
            // 左括号小于对数时,字符串拼接左括号,而且左括号个数+1
            if (open < n) {
                backtrack(rs, current + "(", open + 1, close, n);
            }
            //右括号个数小于左括号个数时,字符串拼接右括号,而且右括号个数+1
            if (close < open) {
                backtrack(rs, current + ")", open, close + 1, n);
            }
        }
    

    相关文章

      网友评论

          本文标题:22.括号生成

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