Python 3 | 简单解答

有重复项数字的所有排列

http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863

例: [1, 1, 2, 3]
步骤:
[1] + permuteUnique([1, 2, 3])中的每一个item
[1]重复了,直接跳过
[2] + permuteUnique([1, 1, 3])中的每一个item
[3] + permuteUnique([1, 1, 2])中的每一个item

基本思路:
遍历list中每一个value,如果value没有出现过,[value] + permuteUnique(去掉本value的list)中的每一个item就是一个结果
需要一个dict记录一个value出现过没有
注意边缘情况, length = 0 和 1

class Solution:
    def permuteUnique(self, num):
        if len(num) == 0:
            return []
        if len(num) == 1:
            return [num]
        result = []
        dict = {}
        for idx, value in enumerate(num):
            if value not in dict:
                dict[value] = True
                tmp = self.permuteUnique(num[: idx] + num[idx + 1:])
                for item in tmp:
                    current = [value] + item
                    result.append(current)
            else:
                continue

        return result
全部评论
最后的result要.sort()一下吧?
点赞 回复 分享
发布于 2024-06-09 10:46 福建

相关推荐

程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
12-27 22:46
门头沟学院 Java
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务