根据题目可以画出回溯树,非常直观,需要处理的就是何时回溯,结束递归条件是此时长度达到规定长度。如果此时左括号数量小于n,则继续添加左括号。如果左括号数量大于右括号,则添加右括号。
class Solution {
List<String> res=new ArrayList<String>();
public List<String> generateParenthesis(int n) {
if(n==0)return res;
core(n,0,0,new StringBuilder());
return res;
}
public void core(int n,int left,int right,StringBuilder sb){
if(sb.length()==2*n){
res.add(sb.toString());
return;
}
if(left<n){
sb.append('(');
core(n,left+1,right,sb);
sb.deleteCharAt(sb.length()-1);
}
if(left>right){
sb.append(')');
core(n,left,right+1,sb);
sb.deleteCharAt(sb.length()-1);
}
}
}