思路
如图,left表示左括号数量,right表示右括号数量,存在以下几种情况
·左括号数量=右括号数量=n——满足条件
·左括号数量<右括号数量——不满足条件,直接返回
`左括号数量>=右括号数量,可以继续添加
·当左括号数量<n,可以继续添加左括号
·当右括号数量<n,可以继续添加右括号
代码
class Solution {
List<String> result = new ArrayList<>();
StringBuffer sb = new StringBuffer();
public List<String> generateParenthesis(int n) {
backtracking(n, result, sb, 0, 0);
return result;
}
private void backtracking(int n, List<String> result, StringBuffer sb, int left, int right) {
if(left==n && right==n){
result.add(sb.toString());
return;
}
if(left<right){
return;
}else{
if(left<n){
//添加左括号
backtracking(n,result,sb.append("("),left+1,right);
//return回来之后,删除最后一个位置上的字符
sb.deleteCharAt(sb.length()-1);
}
if(right<n){
//添加右括号
backtracking(n,result,sb.append(")"),left,right+1);
sb.deleteCharAt(sb.length()-1);
}
}
}
}