题目描述:
解题思路:
递归回溯,看代码应该能看懂。注意剪枝,也就是当left>n或者右括号大于左边的话都return掉。
参考代码:
List<String> list = new ArrayList<>();
public List<String> generateParenthesis(int n) {
if (n == 0) {
return list;
}
String s = "";
dfs(s, 0, 0, n);
return list;
}
private void dfs(String s, int left, int right, int n) {
if (left > n || right > left) {
return;
}
if (left == n && right == n) {
list.add(s);
return;
}
dfs(s+"(",left+1,right,n);
dfs(s+")",left,right+1,n);
}