前言
- 全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
- 全排列数:
f
(
n
)
=
n
!
(
定
义
0
!
=
1
)
f(n)=n!(定义0!=1)
f(n)=n!(定义0!=1)
- 递归实现方法:
- 要求长度为n的序列的全排列序列:
- ①依次选取原始序列一个元素作为全排列序列结果的第一个元素
- ②递归调用全排列算法生成剩余n-1个元素的所有全排列序列
- ③将①的元素分别与②的每一个序列组合,即可得到长度为n的序列所有全排列序列
- ④递归结束条件:长度n=2的序列seq的有两个全排列序列为[seq[0],seq[1]]和 [seq[1],seq[0]]
代码
- 输入:长度为n的序列,元素可以任何类型
- 输出:输入序列的所有全排列序列
def full_sort(seq: list):
'''
author: 浅若清风cyf
date: 2022/03/17
全排列算法(递归)
:param seq: 原始序列
:return:
'''
results = []
if len(seq) == 1:
return seq
elif len(seq) == 2:
return [[seq[0], seq[1]], [seq[1], seq[0]]]
else:
for i in seq:
sub_seq = seq.copy()
sub_seq.remove(i)
tmp_result = full_sort(sub_seq)
for t in tmp_result:
results.append([i] + t)
return results
测试结果
if __name__ == '__main__':
res = full_sort([1, 2, 3, 4])
n = 0
for i in res:
print(i, end=' ')
n += 1
if n % 5 == 0:
n = n % 5
print('')
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/78e9ddbfbd8b0ca95fb559b3efd883f8.png)
res = full_sort(['Apple', 'XiaoMi', 'HuaWei', 'OPPO'])
n = 0
for i in res:
print(i, end=' ')
n += 1
if n % 5 == 0:
n = n % 5
print('')
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e1aae0e5badaed64201076cd3799f9a0.png)