题目:
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
方法:灵神 组合型回溯-剪枝-枚举填左括号还是右括号
代码:
class Solution {
private int n;
private char[] path;
private final List<String> ans = new ArrayList<>();
public List<String> generateParenthesis(int n) {
this.n = n;
path = new char[n * 2];
dfs(0, 0);
return ans;
}
private void dfs(int i, int open) {
if (i == n * 2) {
ans.add(new String(path));
return;
}
if (open < n) { // 可以填左括号
path[i] = '(';
dfs(i + 1, open + 1);
}
if (i - open < open) { // 可以填右括号
path[i] = ')';
dfs(i + 1, open);
}
}
}