题目描述:数字
n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:
输入:n = 1 输出:["()"]提示:
1 <= n <= 8
- 递归回溯:使用递归和回溯的方法来生成所有可能的括号序列
- 基准情况:当生成的括号序列的长度达到
n*2
,即2n
个括号时,检查该序列是否是有效的。有效的括号序列是指每个左括号(
都有一个相匹配的右括号)
- 添加和删除括号:在每一步,可以选择添加一个左括号或右括号到当前的括号序列中,然后递归处理剩余的括号
class Solution {
List<String> ans = new LinkedList<>();
StringBuilder temp = new StringBuilder();
public List<String> generateParenthesis(int n) {
Backtracking(0, n, 0, 0);
return ans;
}
public void Backtracking(int index, int n, int left, int right) {
if (right > left) return;
if (index == n * 2) {
if (left == right) ans.add(temp.toString());
return;
}
temp.append("(");
Backtracking(index + 1, n, left + 1, right);
temp.deleteCharAt(temp.length() - 1);
if (right == left) return;
temp.append(")");
Backtracking(index + 1, n, left, right + 1);
temp.deleteCharAt(temp.length() - 1);
}
}