给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
- 时间复杂度:$O(n!)$
- 套用labuladong回溯法模板。
- 路径:在本题中,每一次都需要遍历整个nums,所以路径=nums
- 需要特别注意的是,本题在add路径的时候,需要add一份路径的copy,不然拷贝的问题
result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: # 做选择 将该选择从选择列表移除 路径.add(选择) # 回溯 backtrack(路径, 选择列表) # 撤销选择 路径.remove(选择) 将该选择再加入选择列表
- code
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: def backtrack(nums, choice): if len(choice) == len(nums): res.append(choice.copy()) return else: for i in range(len(nums)): if nums[i] in choice: continue choice.append(nums[i]) backtrack(nums, choice) choice.pop() res = [] backtrack(nums, []) return res