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
    
  • 相关阅读:
    神秘题目4
    神秘题目3
    神秘题目2
    AC自动机
    Fence Obstacle Course 题解
    Fractal Streets
    龟速乘
    快速幂
    Stall Reservation
    Sunscreen
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11286033.html
Copyright © 2011-2022 走看看