题目描述:
给出 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);
}
}