字符串递归全排列

字符串递归全排列

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;

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


你可能感兴趣的:(字符串递归全排列)