zoukankan      html  css  js  c++  java
  • [笔记] 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
    
  • 相关阅读:
    Ueditor之SAE移植
    SAE flask及其扩展 bug指南
    SAE 安装未包含的第三方依赖包
    Bootstrap 和 LESS
    Device.js——检测设备平台、操作系统的Javascript 库
    Flask 富文本编辑器
    DDoS攻击
    WPF之数据绑定
    参数测试
    总结 一下UML 类图的关系
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/10416108.html
Copyright © 2011-2022 走看看