-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPermutations.py
48 lines (42 loc) · 1.46 KB
/
Permutations.py
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -*- coding: utf-8 -*-#
'''
@Project : ClassicAlgorighthms
@File : Permutations.py
@USER : ZZZZZ
@TIME : 2021/5/10 10:33
'''
class Permutations():
def __init__(self):
pass
def permutations(self, nums):
'''
求出nums数组中元素的全排列
:param nums: 待求数组
:return: 全排列列表
'''
self.res = []
def backtrack(nums, start):
'''
求出nums数组所有元素的全排列
:param nums: 待求组合的数组
:param start: 数组当前位置开始,之后元素的全排列
:param track: 暂时记录当前加入组合的元素
:return: None
'''
# 当排列中的数量达到数组的大小时,加入最终结果
if start == len(nums) - 1:
self.res.append(nums[:])
return
for i in range(start, len(nums)):
# 选择, 将所有的之后的位置与当前位置进行一次交换
nums[i], nums[start] = nums[start], nums[i]
# 回溯
backtrack(nums, start + 1)
# 撤销选择,回退交换
nums[i], nums[start] = nums[start], nums[i]
backtrack(nums, 0)
return self.res
if __name__ == "__main__":
pm = Permutations()
nums = [2, 7, 1]
print("数组的全部排列为:{}".format(pm.permutations(nums)))