字符串递归全排列
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;
这个问题的解决方法就是,在进行交换完成之后,再把它交换会原来的样子即