Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 8b2fe4a

Browse files
solves subsets II
1 parent 2d13588 commit 8b2fe4a

File tree

2 files changed

+15
-26
lines changed

2 files changed

+15
-26
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
| 86 | [Partition List](https://leetcode.com/problems/partition-list) | [![Java](assets/java.png)](src/PartitionList.java) | |
8181
| 88 | [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array) | [![Java](assets/java.png)](src/MergeSortedArray.java) [![Python](assets/python.png)](python/merge_sorted_array.py) | |
8282
| 89 | [Gray Code](https://leetcode.com/problems/gray-code) | [![Java](assets/java.png)](src/GrayCode.java) | |
83+
| 90 | [Subsets II](https://leetcode.com/problems/subsets-ii) | [![Java](assets/java.png)](src/SubsetsII.java) | |
8384
| 94 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) | [![Java](assets/java.png)](src/BinaryTreeInorderTraversal.java) [![Python](assets/python.png)](python/binary_tree_inorder_traversal.py) | |
8485
| 100 | [Same Tree](https://leetcode.com/problems/same-tree) | [![Java](assets/java.png)](src/SameTree.java) [![Python](assets/python.png)](python/same_tree.py) | |
8586
| 101 | [Symmetric Tree](https://leetcode.com/problems/symmetric-tree) | [![Java](assets/java.png)](src/SymmetricTree.java) [![Python](assets/python.png)](python/symmetric_tree.py) | |

src/SubsetsII.java

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,27 @@
1+
// https://leetcode.com/problems/subsets-ii
2+
// T: O(2^n)
3+
// S: O(n * 2^n)
4+
15
import java.util.ArrayList;
2-
import java.util.HashMap;
6+
import java.util.Arrays;
37
import java.util.LinkedList;
48
import java.util.List;
5-
import java.util.Map;
69

710
public class SubsetsII {
811
public List<List<Integer>> subsetsWithDup(int[] nums) {
9-
final Map<Integer, Integer> frequencies = getElementFrequencies(nums);
12+
Arrays.sort(nums);
1013
final List<List<Integer>> result = new ArrayList<>();
11-
computeSubSets(frequencies, result, new LinkedList<>(), 0, nums.length);
14+
helper(result, new LinkedList<>(), nums, 0);
1215
return result;
1316
}
1417

15-
private void computeSubSets(Map<Integer, Integer> frequencies, List<List<Integer>> result, LinkedList<Integer> current, int depth, int maxDepth) {
16-
if (depth == maxDepth) {
17-
result.add(new ArrayList<>(current));
18-
return;
19-
}
20-
for (Map.Entry<Integer, Integer> entry : frequencies.entrySet()) {
21-
if (entry.getValue() > 0) {
22-
entry.setValue(entry.getValue() - 1);
23-
computeSubSets(frequencies, result, current, depth + 1, maxDepth);
24-
current.add(entry.getKey());
25-
computeSubSets(frequencies, result, current, depth + 1, maxDepth);
26-
current.removeLast();
27-
entry.setValue(entry.getValue() + 1);
28-
}
29-
}
30-
}
31-
32-
private Map<Integer, Integer> getElementFrequencies(int[] array) {
33-
final Map<Integer, Integer> frequencies = new HashMap<>();
34-
for (int element : array) {
35-
frequencies.put(element, frequencies.getOrDefault(element, 0) + 1);
18+
public void helper(List<List<Integer>> result, LinkedList<Integer> current, int[] numbers, int index) {
19+
result.add(new ArrayList<>(current));
20+
for(int i = index ; i < numbers.length ; i++) {
21+
if(i > index && numbers[i] == numbers[i-1]) continue;
22+
current.add(numbers[i]);
23+
helper(result, current, numbers, i + 1);
24+
current.removeLast();
3625
}
37-
return frequencies;
3826
}
3927
}

0 commit comments

Comments
 (0)