Java

public class Solution {

public List<List<Integer>> permuteUnique(int[] num) {

List<List<Integer>> ret= new ArrayList<List<Integer>>();

List<Integer> s=new ArrayList<Integer>();

if(num==null||num.length==0)

return ret;

Arrays.sort(num);

dfs(ret, s, num, new boolean[num.length]);

return ret;

}

void dfs(List<List<Integer>> ret, List<Integer> s, int [] num, boolean [] used){

if(s.size()==num.length){

ret.add(new ArrayList(s));

return;

}

for(int i=0;i<num.length;i++){

if(i>0&&!used[i-1]&&num[i-1]==num[i]) continue;

if(!used[i]){

used[i]=true;

s.add(num[i]);

dfs(ret,s,num,used);

used[i]=false;

s.remove(s.size()-1);

}

}

}

}

Last updated

Was this helpful?