全排列46

题目:

给定一个没有重复数字的序列,返回其所有可能的全排列。

1
2
3
4
5
6
7
8
9
10
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

思路:对于每个元素,求剩余元素的全排列,再将此元素append到结果上

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class :
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
n = len(nums)

if n <= 1:
return [nums]
res = []
for i in range(n):
nums_copy = nums.copy()
sub_res = [nums_copy.pop(i)]
s = self.permute(nums_copy)
a = [sub_res + j for j in s]
# 递归过程
sub_res.extend(self.permute(nums_copy))
for k in a:
if not k in res:
res.append(k)
return res

# 例子
a = [1, 2, 3]
print(Solution().permute(a))