将问题转换为数的模型
最后在进行剪枝
分别有两种情况不满足:
1.左括号>n
2.右括号>左括号
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list=new ArrayList<>();
if(n<=0) return list;
dfs(n,"",list,0,0);
return list;
}
public void dfs(int n,String res,List<String> list,int zuo ,int you)
{
if(zuo>n||you>zuo)
return;
//括号数为n的2倍时添加
if(res.length()==2*n)
{
list.add(res);
return;
}
dfs(n,res+"(",list,zuo+1,you);
dfs(n,")",list,zuo,you+1);
}
}