java 全排列 非递归_全排列(递归与非递归实现) | 学步园
1、算法简述
简单地说:就是第一个数分别以后面的数进行交换
E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)
然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行。
void swap(string &pszStr,int k,int m)
{
if(k==m)
return ;
char tmp;
tmp=pszStr[k];
pszStr[k]=pszStr[m];
pszStr[m]=tmp;
}
void Perm( string &pszStr , int begin , int end )
{
if (begin == end)
{
static int s_i = 1;
cout<
}
else
{
for (int i = begin; i <= end; i++) //第i个数分别与它后面的数字交换就能得到新的排列
{
swap(pszStr,begin,i);
Perm(pszStr, begin + 1, end);
swap(pszStr , begin, i);
}
}
}
非递归算法
1.算法简述
Prem( char *s ) //全排列函数
{
char *pEnd = s + strlen(s) - 1;
char *p = pEnd; //p代表替换点
//q代表替换点的下一个数 ,pMax 代表替换点后比替换点大的最小数
char *q = new char,*pMax = new char; //注意初始化!!!
while (p != s) //p == s 就结束循环
{
q = p;
p--;
if (*p < *q)
{
pMax = FindMaxForOne(p,pEnd); //找与替换点交换的点
Swap(p,pMax); //交换
Reverse(q,pEnd); //将替换点后所有数进行反转
Print(s); //输出
p = pEnd; //将替换点置最后一个点,开始下一轮循环
}
if (s == p) break; //结束条件
}
}
char* FindMaxForOne(char *p,char *q)
{
char *p1 = p;
char *p2 = q;
while (*p2 <= *p1) p2--;
return p2;
}
java 全排列 非递归_全排列(递归与非递归实现) | 学步园相关推荐
- java 三维向量类_计算几何,三维向量的旋转 | 学步园
写这篇日志有两个目的:一来是想测试新装上去的LaTeX插件显示数学公式是否好用(不过貌似通过RSS获取到的日志是没有办法显示的--):二来是对于三维向量绕任意轴的旋转之前我都是用结论的,今天因为做计算 ...
- java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...
1.全排列的定义和公式: 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.由排列的定义,显然不同的顺序是一个不同的排列.从n个元素中取m个元素 ...
- 约瑟夫问题java 递归_从约瑟夫问题的递归实现的问题说起
在解决约瑟夫问题时,我比较推荐使用递归,因为递归实现的算法代码更短,逻辑也更清晰,然而很多人有一个疑问,那就是他们知道递归层数是有极限的,这就意味着当需要很大层数的递归时,递归算法是不可行的,会导致段 ...
- python全排列字典序输出 递归_全排列-字典序列、递归方法c语言实现
当前位置:我的异常网» C语言 » 全排列-字典序列.递归方法c语言实现 全排列-字典序列.递归方法c语言实现 www.MyException.Cn 网友分享于:2014-04-20 浏览:4次 ...
- 图的dfs非递归_如何理解恶心的递归
力扣leetcode-cn.com 递归恶心主要恶心在无论是做题还是解析都比较抽象,这里记录一下递归小白的理解过程: # Definition for a binary tree node. 以上图 ...
- 二叉树层序遍历递归与非递归_二叉树的遍历「递归、非递归」以及自己的感受
--------又来了一次二叉树的遍历,每次都有不一样的理解!真不知道那些大佬是如何想出这些牛逼的算法的,佩服至极!!!!大家多写,多想,对这些的理解真的会发生变化!!! -------- ----- ...
- python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...
经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...
- sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...
源自:7-5 Python之递归函数 对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历.我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获. #if条件不成立的省略 ...
- java正则表达式非贪婪_正则表达式贪婪与非贪婪模式(示例代码)
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...
最新文章
- java aio_java中的AIO
- JSR 133 Java内存模型以及并发编程的最权威论文汇总
- SHELL编程实现批量Netatalk字符集文件名替换
- 函数传参字典_Python 函数中的 4 种参数类型
- 寻找是生命中的另一场迷失
- (转载)解决eclipse安装maven的问题:Unable to update index for central|http://repo1.maven.org/maven2...
- Struts2国际化——完整实例代码
- paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.
- Presto 安装与部署
- 2019最新版QQ音乐api调用(原创)
- 初中教师资格证科学计算机面试,2019上半年教师资格证面试真题:初中信息技术...
- 瞬态抑制二极管与稳压二极管的区别
- 2022春软件工程课后作业(3.16)
- mysql数据库引擎面试,mysql数据库引擎面试
- 如何参与linux内核开发
- 苹果如何修改无线DNS服务器,苹果路由器dns怎么设置
- 4、oracle使用网络管理工具—Net Manager添加本地监听程序
- 君のことが好きだよ。
- python批量修改图片内容_python批量修改图片大小的方法
- EXCEL地图 | 在EXCEL中也能绘制GIS地图,也能导出ShapFile文件,还能...