- 题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
- 示例
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
- 算法
代码详细注释
- 代码
class Solution {
// 保存最终结果
List<String> res = new ArrayList<>();
// 保存当前结果
StringBuilder cur = new StringBuilder();
// left表示左括号个数,right表示右括号个数,cur表示当前结果
public void dfs(int n, int left, int right) {
// 如左括号个数与右括号个数都是n,则找到一个最终结果
if (left == n && right == n) {
res.add(cur.toString());
return;
}
// 记录添加左括号之前的长度,方便回溯
int length = cur.length();
// 如果左括号个数小于n,则添加左括号
if (left < n) {
cur.append("(");
dfs(n, left + 1, right);
}
// 回溯,将添加的左括号删去
cur.setLength(length);
// 如果右括号个数小于n,则添加右括号
if (right < n && right < left) {
cur.append(")");
dfs(n, left, right + 1);
}
}
public List<String> generateParenthesis(int n) {
dfs(n,0,0);
return res;
}
}