python非递归全排列实现方法
刚刚开始学习python,当前看到了函数这一节。结合数组操作,写了个非递归的全排列生成。原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列。因为Python切割数组或者字符串,以及合并比较方便,所以,程序会节省很多代码。
def getArrayInsertCharToStr(STR,CHAR): arr =[] s_len = len(STR) index =0 while index <= s_len: #分割字符串 arr.append(STR[:index]+CHAR+STR[index:s_len]) index = index + 1 return arr def getArrayInsertCharToArray(array,CHAR): index = 0 re_array = [] while index < len(array): re_array = re_array + getArrayInsertCharToStr(array[index],CHAR) index = index + 1 return re_array def getPermutation(STR): resultArr = [STR[0]] for item in STR[1:]: resultArr = getArrayInsertCharToArray(resultArr,item) return resultArr print(getPermutation('abc'))
以上这篇python非递归全排列实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
python使用递归解决全排列数字示例
第一种方法:递归 复制代码 代码如下: def perms(elements): if len(elements) <=1: yield elements else: for perm in perms(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:] for item in li
-
python非递归全排列实现方法
刚刚开始学习python,当前看到了函数这一节.结合数组操作,写了个非递归的全排列生成.原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列.因为Python切割数组或者字符串,以及合并比较方便,所以,程序会节省很多代码. def getArrayInsertCharToStr(STR,CHAR): arr =[] s_len = len(STR) index =0 while index <= s_len: #分割字符串 ar
-
python 非递归解决n皇后问题的方法
复杂度可能高了点- - 也没太注意 我想了好久 也找了好久 没看到什么能够用python解决n皇后问题而且不调用递归的 因为我不太能理解递归(尤其是到n层时) 智商受限- - import copy def check(A,x,y): B=[] flag=True for i in range(len(A)): for j in range(len(A)): if A[i][j]==1: B.append([i,j]) for m in range(len(B)): p = B[m][0] q
-
python递归全排列实现方法
本文实例为大家分享了python递归全排列的实现方法,供大家参考,具体内容如下 排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 递归思想: 取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列 1)如果数组只有一个元素n=1,a={1} 则全排列就是
-
分析python动态规划的递归、非递归实现
概要 本文只是简单的介绍动态规划递归.非递归算法实现 案例一 题目一:求数组非相邻最大和 [题目描述] 在一个数组arr中,找出一组不相邻的数字,使得最后的和最大. [示例输入] arr=1 2 4 1 7 8 3 [示例输出] 15 from functools import wraps def memoDeco(func): ''' memoDeco主要是缓存已遍历的节点,减少递归内存开销 ''' cashe={} @wraps(func) def wrapper(*args): if ar
-
全排列算法的非递归实现与递归实现的方法(C++)
(一)非递归全排列算法基本思想是: 1.找到所有排列中最小的一个排列P. 2.找到刚刚好比P大比其它都小的排列Q, 3.循环执行第二步,直到找到一个最大的排列,算法结束.下面用数学的方法描述:给定已知序列 P = A1A2A3An ( Ai!=Aj , (1<=i<=n , 1<=j<=n, i != j ) )找到P的一个最小排列Pmin = P1P2P3Pn 有 Pi > P(i-1) (1 < i <= n)从Pmin开始,总是目
-
C++实现二叉树非递归遍历方法实例总结
一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的.现举一个非递归遍历的方法如下,供大家参考. 具体代码如下: class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> out; stack<TreeNode*> s; s.push(root); while(!s.empty()
-
python二分法查找算法实现方法【递归与非递归】
本文实例讲述了python二分法查找算法实现方法.分享给大家供大家参考,具体如下: 二分法查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过
-
非递归的输出1-N的全排列实例(推荐)
网易游戏笔试题算法题之一,可以用C++,Java,Python,由于Python代码量较小,于是我选择Python语言. 算法总体思路是从1,2,3--N这个排列开始,一直计算下一个排列,直到输出N,N-1,--1为止 那么如何计算给定排列的下一个排列? 考虑[2,3,5,4,1]这个序列,从后往前寻找第一对递增的相邻数字,即3,5.那么3就是替换数,3所在的位置是替换点. 将3和替换点后面比3大的最小数交换,这里是4,得到[2,4,5,3,1].然后再交换替换点后面的第一个数和最后一个数,即交
-
用Python实现二叉树、二叉树非递归遍历及绘制的例子
前言 关于二叉树的实现与遍历,网上已经有很多文章了,包括C, C++以及JAVA等.鉴于python做为脚本语言的简洁性,这里写一篇小文章用python实现二叉树,帮助一些对数据结构不太熟悉的人快速了解下二叉树.本文主要通过python以非递归形式实现二叉树构造.前序遍历,中序遍历,后序遍历,层次遍历以及求二叉树的深度及叶子结点数.其他非递归形式的遍历,想必大多人应该都很清楚,就不再声明.如果你用C或者C++或者其他高级语言写过二叉树或者阅读过相关方面代码,应该知道二叉树的非递归遍历避不开通过栈
-
python实现文法左递归的消除方法
前言 继词法分析后,又来到语法分析范畴.完成语法分析需要解决几个子问题,今天就完成文法左递归的消除. 没借鉴任何博客,完全自己造轮子. 开始之前 文法左递归消除程序的核心是对字符串的处理,输入的产生式作为字符串,对它的拆分.替换与合并操作贯穿始终,处理过程的逻辑和思路稍有错漏便会漏洞百出. 采用直接改写法,不理解左递归消除方法很难读懂代码. 要求 CFG文法判断 左递归的类型 消除直接左递归和间接左递归 界面 源码 import os import tkinter as tk import tk
随机推荐
- hadoop动态增加和删除节点方法介绍
- Go语言method详解
- Flex 自定义DataGrid实现根据条目某一属性值改变背景颜色
- 软件测试面试如何测试网页的登录页面
- MySQL5.7压缩包安装Windows的方式
- ExtJs 表单提交登陆实现代码
- asp.net使用母版页中使用ajax脚本取数据
- php仿discuz分页效果代码
- JS 使用for循环遍历子节点查找元素
- expdp 中ORA-39002、ORA-39070错误详解及解决办法
- Serv-U 550 Permission denied 的解决办法
- Windows xp光盘启动安装过程详细图解
- Windows SVN服务器搭建方法
- Linux网络搭建基础实验(1)
- 使用C语言来解决循环队列问题的方法
- php 伪静态之IIS篇
- Android与单片机通信常用数据转换方法总结
- Android自定义PopupWindow仿点击弹出分享功能
- VMware中centos系统连接wifi的图文方法
- Vue实现搜索结果高亮显示关键字