字符串递归全排列

字符串递归全排列

abc 

acb 

bac 

bca 

cba 

cab 

1.   我们会发现每个字母都会有首字母开头的时候,所以可以用一个for循环使每个字母与a互换打头(begin),如:以abc为原型,b与a互换得bac(然后进行下列步骤,ac循环进行打头,a打头得bac,c打头得bca),c与a互换得到cba(cab)。

2.   然后再对剩下的字母(此时还剩N-1个字母),进行打头,如:abc,acb。

3.   继续循环n-2….n-3…..n-(n-2)….n-(n-1)即还剩一个时(最后一个end),如:abc,acb

4.    此时begin=end输出字符串for循环输出

5.    递归当剩2个元素时[n-(n-2)]时,进行两个元素的排列,也是两个元素轮流打头,回到步骤3和步骤4;

递归当剩3个元素时[n-(n-30)时,进行三个元素的排列,三个元素轮流打头,定下一个后,进行两个元素大头,然后只剩下一个元素,begin=end,输出;

。。。。循环递归

综上得到代码:


但是这一串代码的到的结果是abc  acb  cab cba abc  acb

为什么呢?

原来是当数据调换成acb时,地址改变里面的数据改变就保存了,再进行第二个元素与第一个元素交换时,即acb ----cab;

这个问题的解决方法就是,在进行交换完成之后,再把它交换会原来的样子即


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 两种方法:第一种方法:递归: 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递...
    yuanxiaolan阅读 3,544评论 0 0
  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 13,875评论 4 11
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,178评论 0 2
  • 问题 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排...
    黎贝卡beka阅读 3,290评论 0 1
  • 题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能...
    小碧小琳阅读 8,481评论 0 1

友情链接更多精彩内容