• 2.13

    • 两个 if 里没有 for 循环
  • 2.3

    • 难点 1:回溯函数需要左右括号分别的记录
    • 难点 2:两个回溯一起上,但当 right<left 时,右括号才能开始➕
  • 11.21

    • “能放左就放左,右括号要守序;放完即收回,全满加结果。”
    • path是变化的,不用全局
    • 确实没想出来,主要就是能左就左,不能就右,需要左右俩括号的计数
class Solution {
    List<String> res = new ArrayList<>();
    // StirngBuilder path = new StringBuilder();
    public List<String> generateParenthesis(int n) {
        backtrack(new StringBuilder(),0,0,n);
        return res;
    }
    public void backtrack(StringBuilder path,int left,int right,int n){
        if(left==n&&right==n){
            res.add(path.toString());
            return;
        }
        if(left<n){
            path.append('(');
            backtrack(path,left+1,right,n);
            path.deleteCharAt(path.length()-1);
        }
        if(left>right){
            path.append(')');
            backtrack(path,left,right+1,n);
            path.deleteCharAt(path.length()-1);
        }
    }
}
  • (用left和right记录左右括号拜访数量)
  • “能放左就放左,右括号要守序;放完即收回,全满加结果。”
  • 这里的path要临时不要全局,因为有不同分支,不像数字号码线性增加
  • .toString()