zoukankan      html  css  js  c++  java
  • leetcode-47 全排列

    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
    
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    C#使用BouncyCastle操作国密SM3
    Win10 2004种子
    Excel对比两列数据,找到重复项
    CentOS7 + frp远程访问内网Windows电脑
    Docker on Mac OS
    MySQL5.6中查询多边形包含点情况(ST_Contains、ST_Within)
    SQL查询表的所有字段名
    清除文本中Html的标签
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11286033.html
Copyright © 2011-2022 走看看