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
    
  • 相关阅读:
    java并发编程
    Linux C++服务器端进程SDK
    定时器SDK
    Redis3.0集群方案分析
    DES
    生成验证码
    MVC Ajax.BeginForm 提交上传图片
    EF LIKE 查询
    JS 60秒后重发送验证码
    EF 指定字段修改
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11286033.html
Copyright © 2011-2022 走看看