您的位置:首页 > 大数据 > 人工智能

LeetCode Permutaions II

2016-01-07 19:28 561 查看

LeetCode解题之Permutaions II

原题

输出一个有重复数字的数组的全排列。

注意点:

重复数字的可能导致重复的排列

例子:

输入: nums = [1, 2, 1]

输出: [[1, 1, 2], [1, 2, 1], [2, 1, 1]]

解题思路

这道题是上一题 Permutations 的加强版,现在要考虑重复的数字了,采用了偷懒的办法,先把数组排序,遍历时直接无视重复的数字,在原来的基础上只要添加两行代码。

AC源码

[code]class Solution(object):
    def permuteUnique(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        result = []
        nums.sort()
        self.get_permute([], nums, result)
        return result

    def get_permute(self, current, num, result):
        if not num:
            result.append(current + [])
            return
        for i, v in enumerate(num):
            if i - 1 >= 0 and num[i] == num[i - 1]:
                continue
            current.append(num[i])
            self.get_permute(current, num[:i] + num[i + 1:], result)
            current.pop()

if __name__ == "__main__":
    assert Solution().permuteUnique([1, 2, 1]) == [[1, 1, 2], [1, 2, 1], [2, 1, 1]]


欢迎查看我的Github来获得相关源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: