给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 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); } } }