leetcode专题训练 46. Permutations

这道题我的思路大致是一层一层的构造全排列,先构造1个元素的全排列,再构造2个的,以此类推,直到构造完所有元素的全排列。在由i个元素全排列构造(i+1)个元素的全排列时,只需要把新加的元素放在之前i个元素的所有全排列的首尾或中间即可。需要注意的是深拷贝和浅拷贝的问题,’='赋值属于浅拷贝,也就是说在被赋值的list上操作时,用来赋值的list也会被改变。如果想要被赋值list和原list不再占用一个空间,也就是说重新创建一个全新的list时,就需要用到深拷贝。深拷贝使用的copy库中的deepcopy函数:

import copy
l2 = copy.deepcopy(l1)

之后对l2进行的任何操作都不会影响l1。
这道题的完整代码如下:

import copy
class Solution:
    def solve(self, perm: List[List[int]], num: int) -> List[List[int]]:
        result = []
        l = len(perm)
        for i in range(l):
            l1 = len(perm[i])
            for j in range(l1+1):
                tmp = copy.deepcopy(perm[i])
                tmp.insert(j, num)
                result.append(tmp)
        return result
            
    def permute(self, nums: List[int]) -> List[List[int]]:
        result = [[]]
        for num in nums:
            result = self.solve(result, num)
        return result
发布了201 篇原创文章 · 获赞 26 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Ema1997/article/details/100656529
今日推荐