class Solution {
List<String> ans = new ArrayList<>();
//Time:O(C(n, 2n)) 卡特兰数
public List<String> generateParenthesis(int n) {
if(n <= 0) return ans;
dfs(n, 0, 0,"");
return ans;
}
//l表示"("个数,r表示")"个数,要满足有效括号,str串必须保证l>=r
void dfs(int n, int l, int r,String str){
if(l == n && r == n) {
ans.add(str);
return;
}
//加"("
if(l < n) {
dfs(n, l + 1, r, str + "(");
}
//加")",只有l > r时候才能加")"保证有效性
if(l > r) {
dfs(n, l, r + 1, str + ")");
}
}
}
07-16
469