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 全排列 非递归_全排列(递归与非递归实现) | 学步园相关推荐

  1. java 三维向量类_计算几何,三维向量的旋转 | 学步园

    写这篇日志有两个目的:一来是想测试新装上去的LaTeX插件显示数学公式是否好用(不过貌似通过RSS获取到的日志是没有办法显示的--):二来是对于三维向量绕任意轴的旋转之前我都是用结论的,今天因为做计算 ...

  2. java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.全排列的定义和公式: 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.由排列的定义,显然不同的顺序是一个不同的排列.从n个元素中取m个元素 ...

  3. 约瑟夫问题java 递归_从约瑟夫问题的递归实现的问题说起

    在解决约瑟夫问题时,我比较推荐使用递归,因为递归实现的算法代码更短,逻辑也更清晰,然而很多人有一个疑问,那就是他们知道递归层数是有极限的,这就意味着当需要很大层数的递归时,递归算法是不可行的,会导致段 ...

  4. python全排列字典序输出 递归_全排列-字典序列、递归方法c语言实现

    当前位置:我的异常网» C语言 » 全排列-字典序列.递归方法c语言实现 全排列-字典序列.递归方法c语言实现 www.MyException.Cn  网友分享于:2014-04-20  浏览:4次 ...

  5. 图的dfs非递归_如何理解恶心的递归

    力扣​leetcode-cn.com 递归恶心主要恶心在无论是做题还是解析都比较抽象,这里记录一下递归小白的理解过程: # Definition for a binary tree node. 以上图 ...

  6. 二叉树层序遍历递归与非递归_二叉树的遍历「递归、非递归」以及自己的感受

    --------又来了一次二叉树的遍历,每次都有不一样的理解!真不知道那些大佬是如何想出这些牛逼的算法的,佩服至极!!!!大家多写,多想,对这些的理解真的会发生变化!!! -------- ----- ...

  7. python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...

    经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...

  8. sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...

    源自:7-5 Python之递归函数 对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历.我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获. #if条件不成立的省略 ...

  9. java正则表达式非贪婪_正则表达式贪婪与非贪婪模式(示例代码)

    之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...

最新文章

  1. java aio_java中的AIO
  2. JSR 133 Java内存模型以及并发编程的最权威论文汇总
  3. SHELL编程实现批量Netatalk字符集文件名替换
  4. 函数传参字典_Python 函数中的 4 种参数类型
  5. 寻找是生命中的另一场迷失
  6. (转载)解决eclipse安装maven的问题:Unable to update index for central|http://repo1.maven.org/maven2...
  7. Struts2国际化——完整实例代码
  8. paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.
  9. Presto 安装与部署
  10. 2019最新版QQ音乐api调用(原创)
  11. 初中教师资格证科学计算机面试,2019上半年教师资格证面试真题:初中信息技术...
  12. 瞬态抑制二极管与稳压二极管的区别
  13. 2022春软件工程课后作业(3.16)
  14. mysql数据库引擎面试,mysql数据库引擎面试
  15. 如何参与linux内核开发
  16. 苹果如何修改无线DNS服务器,苹果路由器dns怎么设置
  17. 4、oracle使用网络管理工具—Net Manager添加本地监听程序
  18. 君のことが好きだよ。
  19. python批量修改图片内容_python批量修改图片大小的方法
  20. EXCEL地图 | 在EXCEL中也能绘制GIS地图,也能导出ShapFile文件,还能...

热门文章

  1. 1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充
  2. docker搭建私有仓库
  3. tomcat的jdbc连接池PoolExhaustedException 1
  4. 第二次作业+105032014098
  5. Oracle 基础篇 --- 索引选项
  6. 编程之美-快速费波拉契数列
  7. 监控开发之用munin来自定义插件监控redis和mongodb
  8. 【转载】JS获取浏览器版本信息
  9. Liferay SSO CAS 集成
  10. 关于编程学习及面试,推荐些适合的网站,希望对现在的你有帮助!