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