@@ -52,9 +52,9 @@ https://leetcode-cn.com/problems/permutations/
52
52
53
53
以 [ 1,1,2] 为例,我们的逻辑是:
54
54
55
- - 先从 [ 1,1,2] 选取一个数
55
+ - 先从 [ 1,1,2] 选取一个数。
56
56
- 然后继续从 [ 1,1,2] 选取一个数,并且这个数不能是已经选取过的数。
57
- - 重复这个过程直到选取的数字达到了 3,
57
+ - 重复这个过程直到选取的数字达到了 3。
58
58
59
59
## 关键点解析
60
60
@@ -90,32 +90,6 @@ var permute = function (nums) {
90
90
91
91
Python3 Code:
92
92
93
- ``` Python
94
- class Solution :
95
- def permute (self , nums : List[int ]) -> List[List[int ]]:
96
- """ itertools库内置了这个函数"""
97
- return itertools.permutations(nums)
98
-
99
- def permute2 (self , nums : List[int ]) -> List[List[int ]]:
100
- """ 自己写回溯法"""
101
- res = []
102
- def _backtrace (nums , pre_list ):
103
- if len (nums) <= 0 :
104
- res.append(pre_list)
105
- else :
106
- for i in nums:
107
- # 注意copy一份新的调用,否则无法正常循环
108
- p_list = pre_list.copy()
109
- p_list.append(i)
110
- left_nums = nums.copy()
111
- left_nums.remove(i)
112
- _backtrace(left_nums, p_list)
113
- _backtrace(nums, [])
114
- return res
115
- ```
116
-
117
- Python Code:
118
-
119
93
``` Python
120
94
class Solution :
121
95
def permute (self , nums : List[int ]) -> List[List[int ]]:
@@ -126,7 +100,7 @@ class Solution:
126
100
def permute2 (self , nums : List[int ]) -> List[List[int ]]:
127
101
""" 自己写回溯法"""
128
102
res = []
129
- def _backtrace (nums , pre_list ):
103
+ def backtrack (nums , pre_list ):
130
104
if len (nums) <= 0 :
131
105
res.append(pre_list)
132
106
else :
@@ -136,23 +110,23 @@ class Solution:
136
110
p_list.append(i)
137
111
left_nums = nums.copy()
138
112
left_nums.remove(i)
139
- _backtrace (left_nums, p_list)
140
- _backtrace (nums, [])
113
+ backtrack (left_nums, p_list)
114
+ backtrack (nums, [])
141
115
return res
142
116
143
117
def permute3 (self , nums : List[int ]) -> List[List[int ]]:
144
118
""" 回溯的另一种写法"""
145
119
res = []
146
120
length = len (nums)
147
- def _backtrack (start = 0 ):
121
+ def backtrack (start = 0 ):
148
122
if start == length:
149
123
# nums[:] 返回 nums 的一个副本,指向新的引用,这样后续的操作不会影响已经已知解
150
124
res.append(nums[:])
151
125
for i in range (start, length):
152
126
nums[start], nums[i] = nums[i], nums[start]
153
- _backtrack (start+ 1 )
127
+ backtrack (start+ 1 )
154
128
nums[start], nums[i] = nums[i], nums[start]
155
- _backtrack ()
129
+ backtrack ()
156
130
return res
157
131
```
158
132
0 commit comments