1 """
2 Given a collection of distinct integers, return all possible permutations.
3 Example:
4 Input: [1,2,3]
5 Output:
6 [
7 [1,2,3],
8 [1,3,2],
9 [2,1,3],
10 [2,3,1],
11 [3,1,2],
12 [3,2,1]
13 ]
14 """
15 """
16 本题用回溯法。
17 关键用了一个used数组存储nums中的数字是否被使用过
18 有关回溯法可以有个专题
19 B站视频:https://www.bilibili.com/video/av76286065?from=search&seid=10714180800656978405
20 传送门:https://blog.csdn.net/qq_17550379/article/details/82500364
21 题号:46,47
22 """
23
24 class Solution:
25 def permute(self, nums):
26 res = []
27 if not nums:
28 return res
29 used = [False] * len(nums) # !!!关键所在
30 self._permute(nums, list(), res, used)
31 return res
32
33 def _permute(self, nums, p, res, used):
34 if len(p) == len(nums): # 保存条件
35 return res.append(p.copy())
36 for i, num in enumerate(nums):
37 if used[i]: # !!!
38 continue
39 p.append(num)
40 used[i] = True
41 self._permute(nums, p, res, used)
42 p.pop() # bug p.pop(0)是第一个元素,pop()是最后一个元素,栈
43 used[i] = False