Skip to content

Commit 2d13588

Browse files
a
1 parent 1ff8252 commit 2d13588

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

src/SubsetsII.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.LinkedList;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
public class SubsetsII {
8+
public List<List<Integer>> subsetsWithDup(int[] nums) {
9+
final Map<Integer, Integer> frequencies = getElementFrequencies(nums);
10+
final List<List<Integer>> result = new ArrayList<>();
11+
computeSubSets(frequencies, result, new LinkedList<>(), 0, nums.length);
12+
return result;
13+
}
14+
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);
36+
}
37+
return frequencies;
38+
}
39+
}

0 commit comments

Comments
 (0)