利用used数字来记录当前数字是否被用过,如果当前数字和前一个数字一样,则跳过
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer>temp = new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
if (nums==null || nums.length==0){
return res;
}
boolean [] used = new boolean[nums.length];
Arrays.fill(used,false);
backtrack(nums,used);
return res;
}
public void backtrack(int[] nums,boolean [] used){
if(temp.size()==nums.length){
res.add(new ArrayList<>(temp));
return;
}else {
for (int i=0;i<nums.length;i++){
if (i>0 && used[i-1] == true && nums[i]==nums[i-1]){
continue;
}
if (used[i]==false){
used[i]=true;
temp.add(nums[i]);
backtrack(nums,used);
temp.remove(temp.size()-1);
used[i]=false;
}
}
}
}
}