题目:Permutations II
难度:medium
问题描述:
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], [2,1,1] ]解题思路:
与47题基本相同,只是多了在回溯时,需要跳过重复的元素。具体不同操作已经注释出,代码如下:
public class Solution {
ArrayList<List<Integer>> list=new ArrayList<List<Integer>>();
public List<List<Integer>> permuteUnique(int[] nums) {
if (nums==null) return list;
Arrays.sort(nums);
diedai(nums,new ArrayList<Integer>(),nums.length);
return list;
}
public void diedai(int[]nums,ArrayList<Integer> templist,int overstep){
int[] temp=nums.clone();
int t;
if(overstep==0){
list.add(templist);
}
for(int i=0;i<temp.length;i++){
t=temp[i];
if(i>0&&temp[i]==temp[i-1]){ //与46题不同之处,需要先将nums进行排队,然后,将重复的跳过。
continue;
}
if(temp[i]==Integer.MAX_VALUE){
continue;
}else{
ArrayList<Integer> copylist=(ArrayList<Integer>)templist.clone();
copylist.add(temp[i]);
temp[i]=Integer.MAX_VALUE;
diedai(temp,copylist,overstep-1);
temp[i]=t;
}
}
}
}