首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
admin
2019-03-29
128
问题
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
选项
答案
void Permutation(char* pStr, char* pBegin); ///////////////////////////////////////////////////////////////////////// // Get the permutation of a string, // for example, input string abc, its permutation is // abc acb bac bca cba cab ///////////////////////////////////////////////////////////////////////// void Permutation(char* pStr) { Permutation(pStr, pStr); } ///////////////////////////////////////////////////////////////////////// // Print the permutation of a string, // Input: pStr - input string // pBegin - points to the begin char of string // which we want to permutate in this recursion ///////////////////////////////////////////////////////////////////////// void Permutation(char* pStr, char* pBegin) { if(!pStr || !pBegin) return; // if pBegin points to the end of string, // this round of permutation is finished, // print the permuted string if(*pBegin == ’\0’) { printf("%s\n", pStr); } // otherwise, permute string else { for(char* pCh = pBegin; *pCh != ’\0’; ++ pCh) { // swap pCh and pBegin char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr, pBegin + 1); // restore pCh and pBegin temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } }
解析
这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。
我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a的排列。
既然我们已经知道怎么求三个字符的排列,那么固定第一个字符之后求后面两个字符的排列,就是典型的递归思路了。
转载请注明原文地址:https://kaotiyun.com/show/0RmZ777K
0
程序员面试
相关试题推荐
TheUnitedStatesInterstateHighwaySystemisaninfrastructurefeatofunprecedentedproportions.Notonlydoesitjoinallfi
YourfriendDavidjustsentyouabookthatyouexpectedasabirthdaypresent.Sendane-mailtohimtoexpressyourappreciati
Publicationbiasinacademicjournalsisnothingnew.Afindingofnocorrelationbetweensportingeventsandeitherviolentcri
Inthissection,youareaskedtowriteanessaybasedonthefollowinginformation.Makecommentsandexpressyourownopinion.
如何部署一个ASP.net页面。
ASP.NET与ASP相比,主要有哪些进步?
在当前界面【管理工具】窗口中,设置Windows密码策略,将密码长度最小值设置为8个字符。
类型声明语句为:INTEGER(2)::I数据输出语句为:PRINT,I变量I中数据输出域宽是____________字符。
一个软件的架构设计是随着技术的不断进步而不断变化的。以编译器为例,其主流架构经历了管道—过滤器到数据共享为中心的转变过程。以下关于编译器架构的叙述中,错误的是______。
对计算机评价的主要性能指标有时钟频率、①、运算精度和内存容量等。对数据库管理系统评价的主要性能指标有②、数据库所允许的索引数量和最大并发事务处理能力等。①处应填入?
随机试题
下列关于火灾报警控制器上的消音、复位功能的说法中,错误的有()。
火焰钎焊后对钎缝进行清理的目的是防止残余钎剂的腐蚀作用,使钎缝平整、光滑。
卵泡生长发育中,卵母细胞周围的细胞变为方形,并增生成为
被称为是工程咨询单位的生命线,是其形象荣誉的表征,也是其核心竞争能力的最终反映的是()。
【背景资料】某施工单位承接两座单洞分离式隧道施工任务,左线起讫桩号为ZK10+308、ZK10+788,右线起讫桩号为YK10+264、YK10+776。两隧道均为瓦斯隧道,且围岩富含有害矿物质。根据设计要求,隧道洞内路面采用水泥混凝土刚性路面,路面结构
钻孔应连续作业。相邻桩之间净距小于5m寸,邻桩混凝土强度达到()后,方可进行钻孔施工。
某市卷烟厂为增值税一般纳税人,2017年12月份发生下列经济业务:(1)向农业生产者收购烟叶30吨,支付收购价款40万元,另外按收购价款的10%支付了价外补贴,烟叶税20%,取得收购凭证。另支付不含税运输费用3万元,取得运输公司开具的增值税专用发票;烟叶
提出智力三元成分理论的心理学家是()。
设f(x)二阶连续可导,且=2,则().
A、Itissecond-handinformationanduseless.B、Itisgatheredfromothersourcesratherthanfromitsinhabitants.C、Itisfrom
最新回复
(
0
)