Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]have the following unique permutations:
[1,1,2],[1,2,1], and[2,1,1].
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
boolean[] book = new boolean[num.length];
Arrays.sort(num);
dfs(list,temp,0,num,book);
return list;
}
public void dfs(ArrayList<ArrayList<Integer>> list,ArrayList<Integer> temp,int step,int[] num,boolean[] book){
if(step==num.length){
list.add(new ArrayList<>(temp));
return;
}
for(int i=0;i<num.length;i++){
if(!book[i]){
book[i] = true;
temp.add(num[i]);
dfs(list,temp,step+1,num,book);
temp.remove(temp.size()-1);
book[i] = false;
while(i<num.length-1 && num[i]==num[i+1]) i++;
}
}
}
}
249

被折叠的 条评论
为什么被折叠?



