【lc刷题】46 全排列(排列组合)

    xiaoxiao2025-01-20  7

    58/300

    全排列   给定一个没有重复数字的序列,返回其所有可能的全排列。   示例:   输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

    好想直接用itertools.permutations() 但估计‘又’不能那么玩儿。。

    常规思路:recursion

    [1,2,3] 选 [1] 剩下[2,3]

        [2,3] 选[2] 剩下[3]       [3]返回[3]     [2,3] 选[2] 剩下[3] → \to [2]+[3] = [2,3]     :lst = [[2,3]]

        [2,3] 选[3] 剩下[2]       [2]返回[2]     [2,3] 选[3] 剩下[2] → \to [3]+[2] = [3,2]     :lst = [[2,3],[3,2]]

    [1,2,3] 选 [1] 剩下[2,3] → \to [1] + [2,3] = [1,2,3]                                        → \to [1] + [3,2] = [1,3,2] :lst = [[1,2,3],[1,3,2]]

    class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if len(nums) <= 1: return [nums] #(list of list) mylist = [] for i, n in enumerate(nums): _part = nums[:i] + nums[i+1:] #another part of the list for m in self.permute(_part): #list in (list of list) mylist.append([n] + m) #list + list return mylist #(list of list)

    休息日,只刷一道

    最新回复(0)