美文网首页
Permutations II [leetcode]

Permutations II [leetcode]

作者: 是什么样的心情 | 来源:发表于2019-06-02 17:48 被阅读0次

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<List<Integer>> permuteUnique(int[] nums) {
    Arrays.sort(nums);
    List<List<Integer>> list = new LinkedList<List<Integer>>();
    List<Integer> tempList = new ArrayList<Integer>();
    List<Integer> numsList = new ArrayList<Integer>();
    for(int i : nums){
        numsList.add(i);
    }
    find(list, numsList, tempList);
    return list;
}
public void find(List<List<Integer>> list, List<Integer> numsList, List<Integer> tempList){
    if(numsList.isEmpty()){
        list.add(new ArrayList(tempList));
    }
    else{
        for(int i=0; i<numsList.size(); i++){
            if(i==0 || numsList.get(i) != numsList.get(i-1)){
                int temp = numsList.get(i);
                tempList.add(temp);
                numsList.remove(i);
                find(list, numsList, tempList);
                tempList.remove(tempList.size()-1);
                numsList.add(i, temp);
            }
        }
    }
}

相关文章

网友评论

      本文标题:Permutations II [leetcode]

      本文链接:https://www.haomeiwen.com/subject/qxaxxctx.html