回溯
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Arrays.sort(num);
boolean[] visited = new boolean[num.length];
ArrayList<Integer> temp = new ArrayList<>();
backTrack(num,temp,res,visited);
return res;
}
public void backTrack(int[] num,ArrayList<Integer> temp,ArrayList<ArrayList<Integer>> res,boolean[] visited){
if(temp.size() == num.length){
res.add(new ArrayList<>(temp));
return;
}
for(int i=0;i<num.length;i++){
if((visited[i] == true) || (i>0 && num[i] == num[i-1] && !visited[i-1])){
continue;
}else{
temp.add(num[i]);
visited[i] = true;
backTrack(num,temp,res,visited);
temp.remove(temp.size()-1);
visited[i] = false;
}
}
}
}