Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example:
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
boolean[] used = new boolean[nums.length];
Arrays.sort(nums);
backtrack(list, new ArrayList<>(), nums, used);
return list;
}
private void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] nums, boolean used[]) {
if (tempList.size() == nums.length) {
list.add(new ArrayList<>(tempList));
} else {
for (int i = 0; i < nums.length; i++) {
// If this element is already used OR previous similar element was not used
// ,then we will not use this one aswell.
// And ofcourse this array has been sorted for nums(i)==nums(i-1) to work
if (used[i] || i > 0 && nums[i] == nums[i - 1] && !used[i - 1])
continue;
used[i] = true;
tempList.add(nums[i]);
backtrack(list, tempList, nums, used);
tempList.remove(tempList.size() - 1);
used[i] = false;
}
}
}
}
Last updated