1. 程式人生 > 其它 >21 括號生成(LeetCode HOT 100)

21 括號生成(LeetCode HOT 100)

描述:
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。

示例 1:

輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

輸入:n = 1
輸出:["()"]

提示:
1 <= n <= 8

Soulution:

    public static List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        nextChar(n, n, result, "");
        return result;
    }

    public static void nextChar(int ln, int rn, List<String> result, String str) {
        if (ln == 0) {
            while (rn > 0) {
                --rn;
                str = str + ")";
            }
            result.add(str);
            return;
        }
        if (rn > ln) {
            // 避免走向錯誤分支
            nextChar(ln, (rn - 1), result, str + ")");
        }
        nextChar((ln - 1), rn, result, str + "(");
    }

Idea:
回溯思想。
相似題目:17 電話號碼的字母組合

Reslut: