leetcode22-括号生成

括号生成

  • 回溯

回溯过程中记录cnt,cnt是左括号减去右括号的数量。

  1. 如果cnt等于0,那么只能用左括号
  2. 如果cnt等于n-k,那么说明只有剩余括号位全是右括号才可以将所有左括号匹配,只能用右括号
  3. 除此之外,左右括号都可以
class Solution {
    List<String> list = new ArrayList<>();
    char arr[];
    public List<String> generateParenthesis(int n) {
        arr = new char[2*n];
        backtracking(0, n*2, 0);
        return list;
    }
    public void backtracking(int k, int n, int cnt){
        if(k == n){
            list.add(new String(arr));
            return;
        }
        if(cnt == 0){
            arr[k] = '(';
            backtracking(k+1, n, cnt+1);
        }else if(cnt == n-k){
            arr[k] = ')';
            backtracking(k+1, n, cnt-1);
        }else{
            arr[k] = '(';
            backtracking(k+1, n, cnt+1);
            arr[k] = ')';
            backtracking(k+1, n, cnt-1);
        }
    }
}
posted @ 2022-08-17 21:34  xzh-yyds  阅读(21)  评论(0)    收藏  举报