给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
#从第一个数分别与后面的每个数进行交换后进行全排列直到最后一位
res = []
self.mute(nums, 0, res)
return res
def mute(self, nums, i, res):
if i == len(nums):
temp = []
for j in range(len(nums)):
temp.append(nums[j])
res.append(temp)
for j in range(i, len(nums)):
self.swap(nums, i, j)
self.mute(nums, i + 1, res)
self.swap(nums, i, j)
def swap(self, nums, i, j):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
另一种更简单的方法,依次固定第一个元素,前两个元素直到前N-1个元素,对后面的元素进行全排列。
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
#依次固定第一个、前两个元素直到最后一个元素,对后面的元素进行全排列
m = len(nums)
res = []
if m == 1:
return [nums]
if m == 0:
return [[]]
ans = self.permute(nums[1:])
n = len(ans)
for i in range(m):
for j in range(n):
temp = []
temp += ans[j][:i]
temp += [nums[0]]
temp += ans[j][i:]
res.append(temp)
return res