Python达成全排列算法
发布时间:2021-11-12 11:27:20 所属栏目:教程 来源:互联网
导读:所谓全排列,就是给定数组,将所有的可能排列组合都枚举出来,n个元素共有n!种排列组合。 举例,对于[1, 2, 3],全排列结果为:123,132,213,231,312,321,共有3!=6种。 很直觉的思路就是从数组中依次挑选一个元素作为第1元素,固定第1元素之后,再将剩下的n-
所谓全排列,就是给定数组,将所有的可能排列组合都枚举出来,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 ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |