22. 括号生成

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> list = new ArrayList<>();
        if(n <= 0) return list;
        dfs("",n,n,list);
        return list;
    }
    private void dfs(String str,int left,int right,List<String> list){
        if(left == 0 && right == 0){
            list.add(str);
            return;
        }
        //剪枝
        if(left > right){
            return;
        }
        //left <= right
        if(left > 0){
            dfs(str + '(',left - 1,right,list);
        }
        if(right > 0){
            dfs(str + ')',left,right - 1,list);
        }
        
    }
}
一回生,二回熟
原文地址:https://www.cnblogs.com/zzytxl/p/12659824.html