Description
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
Solution 1 迭代
参考:见缝插数
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
if not nums: return [[]]
res = [[nums[0]]]
tmpRes = []
for i in range(1, len(nums)):
for item in res:
# j为待插入的位置
for j in range(len(item)+1):
item.insert(j, nums[i])
tmpRes.append(item[:])# 注意append列表要用深拷贝
item.pop(j)
res = tmpRes
tmpRes = []
return res
Solution 2 回溯
class Solution:
def permute(self, nums):
res = []
def backtrack(nums, tmp):
if not nums:
res.append(tmp)
# return
for i in range(len(nums)):
backtrack(nums[:i] + nums[i+1:], tmp + [nums[i]])
backtrack(nums, [])
return res