|
1 | 1 | class Solution {
|
2 | 2 | public List<String> generateParenthesis(int n) {
|
3 |
| - if (n <= 0) { |
4 |
| - return Collections.emptyList(); |
5 |
| - } |
6 |
| - |
7 | 3 | List<String> result = new ArrayList<>();
|
8 |
| - dfs(n, 0, 0, new StringBuilder(), result); |
| 4 | + |
| 5 | + helper(n, 0, 0, new StringBuilder(), result); |
9 | 6 | return result;
|
10 | 7 | }
|
11 | 8 |
|
12 |
| - private void dfs(int n, int open, int close, StringBuilder sb, List<String> result) { |
13 |
| - if (open == n && close == n) { |
14 |
| - result.add(sb.toString()); |
| 9 | + private void helper(int n, int open, int close, StringBuilder temp, List<String> result) { |
| 10 | + if (temp.length() == n * 2) { |
| 11 | + result.add(temp.toString()); |
15 | 12 | return;
|
16 | 13 | }
|
17 | 14 |
|
18 | 15 | if (open < n) {
|
19 |
| - sb.append('('); |
20 |
| - dfs(n, open + 1, close, sb, result); |
21 |
| - sb.deleteCharAt(sb.length() - 1); |
| 16 | + temp.append("("); |
| 17 | + helper(n, open + 1, close, temp, result); |
| 18 | + temp.deleteCharAt(temp.length() - 1); |
22 | 19 | }
|
23 | 20 |
|
24 | 21 | if (close < open) {
|
25 |
| - sb.append(')'); |
26 |
| - dfs(n, open, close + 1, sb, result); |
27 |
| - sb.deleteCharAt(sb.length() - 1); |
| 22 | + temp.append(")"); |
| 23 | + helper(n, open, close + 1, temp, result); |
| 24 | + temp.deleteCharAt(temp.length() - 1); |
28 | 25 | }
|
29 | 26 | }
|
30 | 27 | }
|
0 commit comments