12-1:(46)全排列

46. 全排列

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

Python solution 1:

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        return [[n] + p
            for i, n in enumerate(nums)
            for p in self.permute(nums[:i] + nums[i+1:])] or [[]]

分析:运用了递归的方法,每次先从不断变化的nums中挑出一个数排在前面,剩下的数参与递归。

在递归中,仍然是先从新的nums中挑出一个数排在前面,然后剩余部分参与下一次递归。

“调数”这一过程是按顺序遍历nums中的每一个数,因此不会漏掉任何情况,也不会多出任何情况。

给定的nums有可能是空集,所以最后要加上or [[]]

Python solution 2:

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        return map(list, itertools.permutations(nums))

分析:

这里用到了自带的全排列函数permutations,其用法见:https://blog.csdn.net/qq_33528613/article/details/79372174,作用是返回一个可迭代对象的所有全排列。

posted @ 2019-07-11 10:04  mingyu02  阅读(148)  评论(0编辑  收藏  举报