领扣算法46:全排列
2019-08-13 本文已影响0人
领带衬有黄金
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1, 2, 3]
输出:
[
[1, 2, 3],
[1, 3, 2],
[2, 1, 3],
[2, 3, 1],
[3, 1, 2],
[3, 2, 1]
]
回溯算法
def permute(nums: list) -> list:
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
print(permute([1, 2, 3]))
第三方包的使用
import itertools
def permute(nums) -> list:
return [list(i) for i in list(itertools.permutations(nums))]
print(permute([1, 2, 3]))