博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输出一个字符串的全排列
阅读量:6434 次
发布时间:2019-06-23

本文共 1166 字,大约阅读时间需要 3 分钟。

  给定一个字符串,要求输出它的全排列,比如ABC,要求输出ABC、ACB、BCA、BAC、CBA、CAB。

  对于这个题目很自然想到一次确定第一个元素然后找出所有情况,就像上例中先确定A**然后找出ABC和ACB。事实上在确定了A后剩下的BC其实也是一个字符串全排列问题,这时候递归就派上用场了,这是一道可以很好地检验自己到底有没有理解递归的题目。在递归的过程中有一个细节值得注意一下,当我们交换某一个元素新得到一个头部字符(比如交换上例中的A、B使字符B为头部节点),再递归剩下的字符串(A、C),完了之后必须将先前交换的元素再重新换回来(再次交换A和B),否则可能会输出重复的字符串(因为在递归时会将所有的字符串打乱,这时候有可能会以已在出现头部出现过的字符为头部)读者可以自己敲代码体会一下,这里就不作图说明了。

  下面是参考代码,如有不足欢迎指正。 

1 /************************************** 2  Author:Zhou You 3  Time:2014.09.14 4  **************************************/ 5 #include 
6 #include
7 8 using namespace std; 9 10 void OutputPermutation(string &strdata,unsigned ileft,unsigned iright)11 {12 if(ileft>iright) return;13 14 if(ileft==iright){15 cout<
<
>strdata;30 OutputPermutation(strdata,0,strdata.length()-1);31 }32 33 int main()34 {35 freopen("txt.in","r",stdin);36 freopen("txt.out","w",stdout);37 38 unsigned case_num= 0;39 cin>>case_num;40 41 for(unsigned i=0;i

 txt.in文件case

3aababc

txt.out输出结果

aabbaabcacbbacbcacbacab

  

转载于:https://www.cnblogs.com/zhouyoulie/archive/2013/05/16/3081917.html

你可能感兴趣的文章
Directory Listing Denied
查看>>
今天讲座的感悟--java
查看>>
o(1)复杂度之双边滤波算法的原理、流程、实现及效果。
查看>>
corner2
查看>>
我见过的几种类型的员工(转)
查看>>
web前端的十种jquery特效及源码下载
查看>>
poj 3414 Pots (bfs+线索)
查看>>
Binary search
查看>>
http://jingyan.baidu.com/article/08b6a591f0fafc14a9092275.html
查看>>
MySQL查询数据表的Auto_Increment(自增id)
查看>>
java多线程系类:JUC集合:01之框架
查看>>
【Linux】 源码安装make命令详解,避免踩坑
查看>>
数据库中间表插入乱序
查看>>
[Python爬虫] 之四:Selenium 抓取微博数据
查看>>
使用OPENROWSET爆破SQL Server密码
查看>>
Mac_安装Homebrew以及Maven
查看>>
eclipse web开发Server配置
查看>>
曹政--互联网搜索老师傅
查看>>
MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
查看>>
linux下使用 du查看某个文件或目录占用磁盘空间的大小
查看>>