|
1 | 1 | package com.fishercoder.solutions;
|
2 | 2 |
|
3 |
| -import com.fishercoder.common.utils.CommonUtils; |
4 |
| - |
5 | 3 | import java.util.ArrayList;
|
6 | 4 | import java.util.Arrays;
|
7 | 5 | import java.util.List;
|
| 6 | +import java.util.stream.IntStream; |
8 | 7 |
|
9 | 8 | /**
|
10 | 9 | * 5087. Letter Tile Possibilities
|
@@ -34,27 +33,23 @@ public int numTilePossibilities(String tiles) {
|
34 | 33 | StringBuilder sb = new StringBuilder();
|
35 | 34 | List<String> result = new ArrayList<>();
|
36 | 35 | dfs(chars, used, sb, result);
|
37 |
| - CommonUtils.print(result); |
38 | 36 | return result.size();
|
39 | 37 | }
|
40 | 38 |
|
41 | 39 | private void dfs(char[] chars, boolean[] used, StringBuilder sb, List<String> result) {
|
42 | 40 | if (sb.length() != 0) {
|
43 | 41 | result.add(sb.toString());
|
44 | 42 | }
|
45 |
| - for (int i = 0; i < chars.length; i++) { |
46 |
| - if (used[i]) { |
47 |
| - continue; |
48 |
| - } |
49 |
| - if (i > 0 && chars[i - 1] == chars[i] && !used[i - 1]) { |
50 |
| - continue; |
51 |
| - } |
52 |
| - used[i] = true; |
53 |
| - sb.append(chars[i]); |
54 |
| - dfs(chars, used, sb, result); |
55 |
| - used[i] = false; |
56 |
| - sb.deleteCharAt(sb.length() - 1); |
57 |
| - } |
| 43 | + IntStream.range(0, chars.length) |
| 44 | + .filter(i -> !used[i]) |
| 45 | + .filter(i -> i <= 0 || chars[i - 1] != chars[i] || used[i - 1]) |
| 46 | + .forEach(i -> { |
| 47 | + used[i] = true; |
| 48 | + sb.append(chars[i]); |
| 49 | + dfs(chars, used, sb, result); |
| 50 | + used[i] = false; |
| 51 | + sb.deleteCharAt(sb.length() - 1); |
| 52 | + }); |
58 | 53 | }
|
59 | 54 | }
|
60 | 55 | }
|
0 commit comments