python生成数字n全排列_[笔记] Python实现全排列算法

所谓全排列,就是给定数组,将所有的可能排列组合都枚举出来,n个元素共有n!种排列组合。

举例,对于['1', '2', '3'],全排列结果为:123,132,213,231,312,321,共有3!=6种。

很直觉的思路就是从数组中依次挑选一个元素作为第1元素,固定第1元素之后,再将剩下的n-1个元素做全排列。

很显然这是递归的思路,还需要确定跳出条件,这里是只剩下1个元素时,自然就到头了。

根据这个思路,代码如下:

from __future__ import print_function

def perm(elem_list, s=''):

# 类型检查

if type(elem_list) != type([]):

return

# 参数合法性检查

if len(elem_list) == 0:

return

# 跳出条件

if len(elem_list) == 1:

# 打印当前结果

print(s+elem_list[0])

return

# 依次挑选一个元素作为第1元素

for i,e in enumerate(elem_list):

# 递归调用自身,同时传入当前的前缀字符串

perm(elem_list[:i] + elem_list[i+1:], s+e)

# 测试用例

perm(['1', '2', '3'])

上述代码的运行结果如下:

123

132

213

231

312

321

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值