欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

22.括号生成

程序员文章站 2024-03-21 14:45:22
...

题目描述:

给出 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);
        }
    }