Permutations II [leetcode]

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

你可能感兴趣的:(Permutations II [leetcode])