22 括号生成(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:
自爱 沉稳 而后爱人