dfs方法
class Solution {
public List<String> generateParenthesis(int n) {
ArrayList<String> res = new ArrayList<String>();
dfs(n,0,0,"",res);
return res;
}
//dfs
public void dfs(int n,int left,int right,String str,ArrayList<String> temp){
//左括号或者右括号数量超出总数量,右括号剩下的多于左括号剩下的才能继续进行加右括号进去
if(left < right || left > n || right > n){
return;
}
//左 ( 和右 ) 数量已经都构建好了。
if(left == right && right == n){
temp.add(str);
}
else{
//先加左括号,再加右括号;
//加完左括号后,左括号数量加1,回溯;
dfs(n,left+1,right,str+"(",temp);
//再加右括号,右括号数量加1,再回溯。
dfs(n,left,righ+1,str+")",temp);
}
}
}