使用递归回溯,快速解决
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
dfs("",n,n,list);
return list;
}
public void dfs(String sb, int left, int right, List<String> list) {
//如果剩下的左括号大于剩下的右括号,那不可能完成了
if(left>right) return;
if(left==0 && right==0) list.add(sb);
if(left>0) dfs(sb+'(', left-1,right,list);
if(right>0) dfs(sb+')',left,right-1,list);
}
}