public class Solution {
boolean[] mark;
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
ArrayList<ArrayList<Integer>>res=new ArrayList<>();
LinkedList<Integer> track=new LinkedList<>();
traceBack(num,res,track);
return res;
}
public void traceBack(int[]num,ArrayList<ArrayList<Integer>>res,LinkedList<Integer> track){
if(track.size()==num.length){
res.add(track);
return;
}
for(int i=0;i<num.length;i++){
if(mark[i] || num[i]==num[i-1]&&!mark[i-1]&&i>0){
continue;
}
track.add(num[i]);
track[i]=true;
traceBack(num,res,track);
track.removeLast();
track[i]=false;
}
}
}