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,作用是返回一个可迭代对象的所有全排列。