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()一下吧?
点赞 回复 分享
发布于 06-09 10:46 福建

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
走不到的路就这样算了吗:大佬硬气
点赞 评论 收藏
分享
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务