leetcode22-括号生成
- 回溯
回溯过程中记录cnt,cnt是左括号减去右括号的数量。
- 如果cnt等于0,那么只能用左括号
- 如果cnt等于n-k,那么说明只有剩余括号位全是右括号才可以将所有左括号匹配,只能用右括号
- 除此之外,左右括号都可以
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);
}
}
}