java:
回溯
class Solution {
boolean[] vis;
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> list = new ArrayList<>();
Arrays.sort(nums);
vis = new boolean[nums.length];
bt(nums, ans, list, 0);
return ans;
}
public void bt(int[] nums, List<List<Integer>> ans, List<Integer> list, int flag){
if(flag == nums.length){
ans.add(new ArrayList<Integer>(list));
return;
}
for(int i = 0; i < nums.length; i ++){
if(vis[i] || (i > 0 && nums[i] == nums[i - 1] && !vis[i - 1])) continue;
list.add(nums[i]);
vis[i] = true;
bt(nums, ans, list, flag + 1);
vis[i] = false;
list.remove(flag);
}
}
}