Leetcode-回溯-组合型
22. 括号生成 - 力扣(LeetCode)
这题并没有才有恢复现场的做法 而是直接覆盖
题目核心是看穿本质 在代码执行过程中左括号必须大于等于右括号
以及回溯最底层的递归条件是递归长度已经达到2n
还有做括号要小于n 又因为i=左+右 因此右等于i-左
open代表左括号的数量
并且递归path的时候采用直接覆盖的方法代替恢复现场
class Solution {
private int m;
private int n;
private List<String> ans=new ArrayList<>();
private char[] path;
public List<String> generateParenthesis(int n) {
this.n=n;
this.m=2*n;
path = new char[n * 2];
dfs(0,0);
return ans;
}
public void dfs(int i,int open){
if(i==m){
ans.add(new String(path));
}
if(open<n){
path[i]='(';
dfs(i+1,open+1);
}
if(i-open<open){
path[i]=')';
dfs(i+1,open);
}
}
}