leetcode47
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
dfs(nums, 0, res);
return res;
}
public void dfs(int[] nums, int i, List<List<Integer>> res) {
if (i == nums.length) {
List<Integer> cur = new ArrayList<>();
for (int num : nums) {
cur.add(num);
}
res.add(cur);
} else {
HashSet<Integer> set = new HashSet<>();
for (int j = i; j < nums.length; j++) {
if (!set.contains(nums[j])) {
set.add(nums[j]);//用hashset判断有重复的直接跳过
swap(nums, i, j);
dfs(nums, i + 1, res);
swap(nums, i, j);
}
}
}
}
public void swap(int[] nums, int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}