LeetCode-022-括号生成
思路
这里通过画图,可以分析出的结论:
- 当前左右括号都有大于 0个可以使用的时候,才产生分支;
- 产生左分支的时候,只看当前是否还有左括号可以使用;
- 产生右分支的时候,还受到左分支的限制,右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候,才可以产生分支;
- 在左边和右边剩余的括号数都等于 0 的时候结算。
代码
class Solution {
List<String> ans=new ArrayList<>();
public List<String> generateParenthesis(int n) {
if(n==0)return ans;
backTrack(n,n,new StringBuilder());
return ans;
}
public void backTrack(int left,int right,StringBuilder p){
if(left==0&&right==0){
ans.add(p.toString());
return;
}
if(left>right)return;
if(left>0){
p.append("(");
backTrack(left-1,right,p);
p.deleteCharAt(p.length()-1);
}
if(right>0){
p.append(")");
backTrack(left,right-1,p);
p.deleteCharAt(p.length()-1);
}
}
}