1 class Solution {
2 public List<List<Integer>> permuteUnique(int[] nums) {
3 List<List<Integer>> ans = new ArrayList<>();
4 int[] visited = new int[nums.length];
5 Arrays.sort(nums);
6 Backtrack(nums,visited,new ArrayList<>(),ans);
7 return ans;
8 }
9 private void Backtrack(int[] nums,int[] visited,ArrayList<Integer> tmp,List<List<Integer>> ans){
10 if(tmp.size()==nums.length){
11 ans.add(new ArrayList<>(tmp));
12 return;
13 }
14 for(int i =0;i<nums.length;i++){
15 if(visited[i]==1||(i>0&&visited[i-1]==0&&nums[i-1]==nums[i]))continue;
16 //if(visited[i]==1)continue;
17 tmp.add(nums[i]);
18 visited[i]=1;
19 Backtrack(nums,visited,tmp,ans);
20 visited[i]=0;
21 tmp.remove(tmp.size()-1);
22 }
23 }
24 }