题目:
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]
]
数组的全排列,但是其中有重复的数字,主要考察去重
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> permute=new ArrayList<Integer>();
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
if(nums==null)
return res;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
map.put(i,0);
}
helper(res,permute,nums,map);
return res;
}
public void helper(List<List<Integer>> res,List<Integer> permute,int[] nums,Map<Integer,Integer> map){
if(permute.size()==nums.length)
res.add(new ArrayList<Integer>(permute));
for(int i=0;i<nums.length;i++){
if(map.get(i)==1||(i!=0&&nums[i]==nums[i-1]&&map.get(i-1)==0))
continue;
map.put(i,1);
permute.add(nums[i]);
helper(res,permute,nums,map);
map.put(i,0);
permute.remove(permute.size()-1);
}
}
}
思路:
和permutations的区别是其中有重复的数字,要写好去重条件,什么时候应该跳过不加入该元素
疑问:
if(map.get(i)==1||(i!=0&&nums[i]==nums[i-1]&&map.get(i-1)==0))
continue;
这个去重的条件还没太看明白,尤其是最后一个map.get(i-1)=0,需要回看