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].
public class Solution {
public List<List<Integer>> permuteUnique(int[] num) {
List<List<Integer>> res=new ArrayList< List<Integer>>();
if(num==null) return res;
getPermute(res,num,0);
HashSet set=new HashSet(res);
res.clear();
res.addAll(set);
return res;
}
public void getPermute(List<List<Integer>> res,int[] num,int begin){
if(begin==num.length){
ArrayList<Integer> a=new ArrayList<Integer>();
for(int i=0;i<num.length;i++){
a.add(num[i]);
}
res.add(a);
}
for(int i=begin;i<num.length;i++){
if(i>begin && num[i]==num[begin]) continue;
swap(num,i,begin);
getPermute(res,num,begin+1);
swap(num,i,begin);
}
}
public void swap(int[] num,int a,int b){
int tmp=num[a];
num[a]=num[b];
num[b]=tmp;
}
}思路:先求出全部的,再删除重复的。
本文介绍了一种算法,该算法能够从可能包含重复元素的整数集合中生成所有唯一的排列组合,并提供了一个具体的Java实现示例。
655

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



