lc046.全排列

 

题目链接

试着写了一下之前做过的类似的题用的方法,不过好像效率不太高。

这个算法的时间复杂度是O(N),空间复杂度是O(N)。

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []

        def recursion(x):
            if x == len(nums)-1:
                cp = copy.deepcopy(nums)
                res.append(cp)
                return
            d = set()
            for i in range(x, len(nums)):
                if nums[i] not in d:
                    d.add(nums[i])
                nums[i], nums[x] = nums[x], nums[i]
                recursion(x+1)
                nums[i], nums[x] = nums[x], nums[i]

        recursion(0)
        return res