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] ]
有i - 1的时候,要求i > 0,起码等于1
(i > 0) && ((!used[i - 1]) && (nums[i] == nums[i - 1])))
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
//cc
List<List<Integer>> results = new ArrayList<List<Integer>>();
boolean[] used = new boolean[nums.length];
if (nums == null || nums.length == 0)
return results;
//排序一下
Arrays.sort(nums);
dfs(nums, new ArrayList<Integer>(), used, results);
return results;
}
public void dfs(int[] nums, List<Integer> temp, boolean[] used,
List<List<Integer>> results) {
//exit
if (temp.size() == nums.length)
results.add(new ArrayList<>(temp));
for (int i = 0; i < nums.length; i++) {
if ((used[i]) || ((i > 0) && ((!used[i - 1]) && (nums[i] == nums[i - 1]))))
continue;
temp.add(nums[i]);
used[i] = true;
dfs(nums, temp, used, results);
used[i] = false;
temp.remove(temp.size() - 1);
}
}
}