https://leetcode-cn.com/problems/generate-parentheses/
dfs + 剪枝
为什么要费劲的设置两个参数leftSizes和rightSizes在我的递归函数里头?
- 剪枝呗
- 如果你不这样,每个位置都可以选择左括号或者右括号,到最后再来检查它合不合法。很耗时间
- 加了这两个参数,我们在中间就可以给它提前剪枝了。就很快
```java
public List
generateParenthesis(int n) { List list = new ArrayList<>(); char[] path = new char[n << 1]; dfs(0, n, n, path, list); return list; }
public void dfs(int idx, int leftSizes, int rightSizes, char[] path, List
- **如果不剪枝就是这样的**```javapublic List<String> generateParenthesis(int n) {List<String> list = new ArrayList<>();char[] path = new char[n << 1];dfs1(0, path, list);return list;}public void dfs1(int idx, char[] path, List<String> list) {if (idx == path.length) {if (isValid(path)) {list.add(String.valueOf(path));return;}return;}path[idx] = '(';dfs1(idx + 1, path, list);path[idx] = ')';dfs1(idx + 1, path, list);}private boolean isValid(char[] path) {int count = 0;for (char c : path) {if (c == '(') {count++;} else {count--;}if (count < 0) {return false;}}return count == 0;}
