码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-47 全排列

时间:2019-08-02 00:15:57      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:import   sel   全排列   重复数   复数   and   solution   排列   不重复   

leetcode-47 全排列

题目描述:

给定一个可包含重复数字的序列,返回所有不重复的全排列。

使用库函数:

from itertools import permutations
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        res = set(permutations(nums,len(nums)))
        return [list(v) for v in res]

先找出所有的组合,再set

from itertools import permutations
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        def perm(begin,end,nums):
            if begin == end:
                res.append(nums[:])
            else:
                j = begin
                for i in range(begin,end):
                    nums[i],nums[j] = nums[j],nums[i]
                    perm(begin+1,end,nums)
                    nums[i],nums[j] = nums[j],nums[i]
        res = []
        perm(0,len(nums),nums)
        res = set([tuple(v) for v in res])
        return [list(v) for v in res]

再放入的时候判断,实际上效率更低

from itertools import permutations
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        def perm(begin,end,nums):
            if begin == end:
                if nums not in res:
                    res.append(nums[:])
            else:
                j = begin
                for i in range(begin,end):
                    nums[i],nums[j] = nums[j],nums[i]
                    perm(begin+1,end,nums)
                    nums[i],nums[j] = nums[j],nums[i]
        res = []
        perm(0,len(nums),nums)
        return res

解法三

from itertools import permutations
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        def perm(nums,tmp):
            if len(nums) == 0:
                res.append(tmp[:])
            for i in range(len(nums)):
                if i > 0 and nums[i] == nums[i-1]:
                    continue
                perm(nums[:i]+nums[i+1:],tmp+[nums[i]])
        res = []
        nums.sort()
        perm(nums,[])
        return res

leetcode-47 全排列

标签:import   sel   全排列   重复数   复数   and   solution   排列   不重复   

原文地址:https://www.cnblogs.com/curtisxiao/p/11286033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!