博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Permutations II
阅读量:6824 次
发布时间:2019-06-26

本文共 1318 字,大约阅读时间需要 4 分钟。

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]]

这题是的一个拓展,主要是当原数组有重复元素的时候,如果依然按permutations的做法,则会产生重复的排列。比如[1,1,2]的数字,如果首先选择了第一个1,然后是第二个1,再是2和先选择第2个1,再选择第二个1,然后再选择2的结果是一样的。必然产生重复。所以对于这种情况,需要进行重复排除。首先输入的数组不一定有序,如果无序,先进行排序,之后在每一步的选择中,只选择重复数字的第一个数字作为一步,后面的一样的数字则不做操作。避免上述的重复情况。代码相比permutation的代码只需要增加一行,如下:

class Solution(object):    def permuteUnique(self, nums):        """        :type nums: List[int]        :rtype: List[List[int]]        """        if not nums:            return [[]]        nums.sort()        allPer = []        per = []        used = [False] * len(nums)        self.helper(nums, used, per, allPer)        return allPer            def helper(self, nums, used, per, allPer):        if len(per) == len(nums):            allPer.append(per+[])            return                 for i in xrange(len(nums)):            if used[i]: continue            if i > 0 and nums[i] == nums[i-1] and not used[i-1]: #排除重复,对于每一步只取重复元素中的第一个。                continue            per.append(nums[i])            used[i] = True            self.helper(nums, used, per, allPer)            per.pop()            used[i] = False

 

转载于:https://www.cnblogs.com/sherylwang/p/5567096.html

你可能感兴趣的文章
j2EE web.xml中的url-pattern的映射规则
查看>>
设计模式之单例模式
查看>>
获取客户端ip地址
查看>>
sessionid如何产生?由谁产生?保存在哪里?
查看>>
oracle 监听服务异常
查看>>
网络流——最大流Dinic算法
查看>>
下面的div浮动上来了
查看>>
程序员生存定律
查看>>
windows 下搭建 apache + php52 + postgreSQL7/8/9环境
查看>>
python正则表达式
查看>>
分布式系统的面试题3
查看>>
带输入输出参数的存储过程
查看>>
CSS3 3D酷炫立方体变换动画
查看>>
1B. Spreadsheets
查看>>
$(selector).each()和$.each()的区别
查看>>
Java并发编程:线程池的使用
查看>>
C++学习笔记01
查看>>
C# 反射机制
查看>>
c++ 2.1 编译器何时创建默认构造函数
查看>>
CentOS6编译LAMP基于FPM模式的应用wordpress
查看>>