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]
前一篇文章讲了无重复元素的排列,这篇文章讲的是有重复元素的排列问题怎么解决。
复杂度
时间 O(nlogn) 空间 O(N)
思路
在无重复元素排列的基础上,我们只需要在每次进入递归前判断当前元素是否在之前已经排列过,这样我们刚开始就需要将待排列的数组排序以便于判断。
代码
public List> permuteUnique(int[] nums) {
Arrays.sort(nums);
List> list = new LinkedList>();
List tempList = new ArrayList();
List numsList = new ArrayList();
for(int i : nums){
numsList.add(i);
}
find(list, numsList, tempList);
return list;
}
public void find(List> list, List numsList, List tempList){
if(numsList.isEmpty()){
list.add(new ArrayList(tempList));
}
else{
for(int i=0; i