Skip to content

Commit 12861a4

Browse files
solves permutations ii
1 parent 1376e12 commit 12861a4

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
| 43 | [Multiply Strings](https://leetcode.com/problems/multiply-strings) | [![Java](assets/java.png)](src/MultiplyStrings.java) | |
4848
| 45 | [Jump Game II](https://leetcode.com/problems/jump-game-ii) | [![Java](assets/java.png)](src/JumpGameII.java) | |
4949
| 46 | [Permutations](https://leetcode.com/problems/permutations) | [![Java](assets/java.png)](src/Permutations.java) | |
50+
| 47 | [Permutations II](https://leetcode.com/problems/permutations-ii) | [![Java](assets/java.png)](src/PermutationsII.java) | |
5051
| 53 | [Maximum SubArray](https://leetcode.com/problems/maximum-subarray) | [![Java](assets/java.png)](src/MaximumSubArray.java) [![Python](assets/python.png)](python/maximum_sum_subarray.py) | |
5152
| 55 | [Jump Game](https://leetcode.com/problems/jump-game) | [![Java](assets/java.png)](src/JumpGame.java) | |
5253
| 58 | [Length of Last Word](https://leetcode.com/problems/length-of-last-word) | [![Java](assets/java.png)](src/LengthOfLastWord.java) [![Python](assets/python.png)](python/length_of_last_word.py) | |

src/PermutationsII.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// https://leetcode.com/problems/permutations-ii
2+
// T: O(n * n!)
3+
// S: O(n * n!)
4+
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.LinkedList;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
public class PermutationsII {
12+
public List<List<Integer>> permuteUnique(int[] nums) {
13+
final Map<Integer, Integer> frequencies = getFrequencies(nums);
14+
final List<List<Integer>> result = new ArrayList<>();
15+
permuteUnique(nums, result, frequencies, new LinkedList<>());
16+
return result;
17+
}
18+
19+
private void permuteUnique(int[] array, List<List<Integer>> result, Map<Integer, Integer> frequencies, LinkedList<Integer> current) {
20+
if (current.size() == array.length) {
21+
result.add(new ArrayList<>(current));
22+
return;
23+
}
24+
for (Map.Entry<Integer, Integer> entry : frequencies.entrySet()) {
25+
if (entry.getValue() > 0) {
26+
entry.setValue(entry.getValue() - 1);
27+
current.add(entry.getKey());
28+
permuteUnique(array, result, frequencies, current);
29+
current.removeLast();
30+
entry.setValue(entry.getValue() + 1);
31+
}
32+
}
33+
}
34+
35+
private Map<Integer, Integer> getFrequencies(int[] array) {
36+
final Map<Integer, Integer> frequencies = new HashMap<>();
37+
for (int element : array) {
38+
frequencies.put(element, frequencies.getOrDefault(element, 0) + 1);
39+
}
40+
return frequencies;
41+
}
42+
}

0 commit comments

Comments
 (0)