字符串的“无重复”全排列非递归算法 [小算法练习]

[问题描述]: 输出字符串的所有全排列,要求无重复字符串出现


[问题解决]:改算法的思想是从字符串排列的最小字符串出发,找到小一个比该字符串大的数据。

             先对字符串排序,得到最小的排列串,然后

             从字符串尾部开始找第一个string[frontPos]<string[frontPos+1]的字符,定位forontPos

             然后从字符串的尾部开始找第一个比string[frontPos]大的字符string[tailPos],定位tailPos

             交换string[frontPos]和string[endPos], 然后 将string[frontPos+1]到string[len-1]的所有字符反序

             即得下一个字符(较前一个字符串大)

             如果得到的是最大的,即找不到比该字符串更到的字符串,该字符串一定是逆序排列的最大字符串

该算法,避免了重复字符串出现的问题。是个比较好的非常不错的典型算法,有那么丁点快排的味道。

递归的算法,可能处理重复的问题比较麻烦,如果不用STL的SET。




[输出] :

Problem "766dx " 's permutaion :
667dx  667xd  66d7x  66dx7  66x7d  66xd7  676dx  676xd  67d6x  67dx6 
67x6d  67xd6  6d67x  6d6x7  6d76x  6d7x6  6dx67  6dx76  6x67d  6x6d7 
6x76d  6x7d6  6xd67  6xd76  766dx  766xd  76d6x  76dx6  76x6d  76xd6 
7d66x  7d6x6  7dx66  7x66d  7x6d6  7xd66  d667x  d66x7  d676x  d67x6 
d6x67  d6x76  d766x  d76x6  d7x66  dx667  dx676  dx766  x667d  x66d7 
x676d  x67d6  x6d67  x6d76  x766d  x76d6  x7d66  xd667  xd676  xd766 
Permutation : 60

Problem "764dx " 's permutaion :
467dx  467xd  46d7x  46dx7  46x7d  46xd7  476dx  476xd  47d6x  47dx6 
47x6d  47xd6  4d67x  4d6x7  4d76x  4d7x6  4dx67  4dx76  4x67d  4x6d7 
4x76d  4x7d6  4xd67  4xd76  647dx  647xd  64d7x  64dx7  64x7d  64xd7 
674dx  674xd  67d4x  67dx4  67x4d  67xd4  6d47x  6d4x7  6d74x  6d7x4 
6dx47  6dx74  6x47d  6x4d7  6x74d  6x7d4  6xd47  6xd74  746dx  746xd 
74d6x  74dx6  74x6d  74xd6  764dx  764xd  76d4x  76dx4  76x4d  76xd4 
7d46x  7d4x6  7d64x  7d6x4  7dx46  7dx64  7x46d  7x4d6  7x64d  7x6d4 
7xd46  7xd64  d467x  d46x7  d476x  d47x6  d4x67  d4x76  d647x  d64x7 
d674x  d67x4  d6x47  d6x74  d746x  d74x6  d764x  d76x4  d7x46  d7x64 
dx467  dx476  dx647  dx674  dx746  dx764  x467d  x46d7  x476d  x47d6 
x4d67  x4d76  x647d  x64d7  x674d  x67d4  x6d47  x6d74  x746d  x74d6 
x764d  x76d4  x7d46  x7d64  xd467  xd476  xd647  xd674  xd746  xd764 
Permutation : 180

Problem "ad64dx " 's permutaion :
46addx  46adxd  46axdd  46dadx  46daxd  46ddax  46ddxa  46dxad  46dxda  46xadd 
46xdad  46xdda  4a6ddx  4a6dxd  4a6xdd  4ad6dx  4ad6xd  4add6x  4addx6  4adx6d 
4adxd6  4ax6dd  4axd6d  4axdd6  4d6adx  4d6axd  4d6dax  4d6dxa  4d6xad  4d6xda 
4da6dx  4da6xd  4dad6x  4dadx6  4dax6d  4daxd6  4dd6ax  4dd6xa  4dda6x  4ddax6 
4ddx6a  4ddxa6  4dx6ad  4dx6da  4dxa6d  4dxad6  4dxd6a  4dxda6  4x6add  4x6dad 
4x6dda  4xa6dd  4xad6d  4xadd6  4xd6ad  4xd6da  4xda6d  4xdad6  4xdd6a  4xdda6 
64addx  64adxd  64axdd  64dadx  64daxd  64ddax  64ddxa  64dxad  64dxda  64xadd 
64xdad  64xdda  6a4ddx  6a4dxd  6a4xdd  6ad4dx  6ad4xd  6add4x  6addx4  6adx4d 
6adxd4  6ax4dd  6axd4d  6axdd4  6d4adx  6d4axd  6d4dax  6d4dxa  6d4xad  6d4xda 
6da4dx  6da4xd  6dad4x  6dadx4  6dax4d  6daxd4  6dd4ax  6dd4xa  6dda4x  6ddax4 
6ddx4a  6ddxa4  6dx4ad  6dx4da  6dxa4d  6dxad4  6dxd4a  6dxda4  6x4add  6x4dad 
6x4dda  6xa4dd  6xad4d  6xadd4  6xd4ad  6xd4da  6xda4d  6xdad4  6xdd4a  6xdda4 
a46ddx  a46dxd  a46xdd  a4d6dx  a4d6xd  a4dd6x  a4ddx6  a4dx6d  a4dxd6  a4x6dd 
a4xd6d  a4xdd6  a64ddx  a64dxd  a64xdd  a6d4dx  a6d4xd  a6dd4x  a6ddx4  a6dx4d 
a6dxd4  a6x4dd  a6xd4d  a6xdd4  ad46dx  ad46xd  ad4d6x  ad4dx6  ad4x6d  ad4xd6 
ad64dx  ad64xd  ad6d4x  ad6dx4  ad6x4d  ad6xd4  add46x  add4x6  add64x  add6x4 
addx46  addx64  adx46d  adx4d6  adx64d  adx6d4  adxd46  adxd64  ax46dd  ax4d6d 
ax4dd6  ax64dd  ax6d4d  ax6dd4  axd46d  axd4d6  axd64d  axd6d4  axdd46  axdd64 
d46adx  d46axd  d46dax  d46dxa  d46xad  d46xda  d4a6dx  d4a6xd  d4ad6x  d4adx6 
d4ax6d  d4axd6  d4d6ax  d4d6xa  d4da6x  d4dax6  d4dx6a  d4dxa6  d4x6ad  d4x6da 
d4xa6d  d4xad6  d4xd6a  d4xda6  d64adx  d64axd  d64dax  d64dxa  d64xad  d64xda 
d6a4dx  d6a4xd  d6ad4x  d6adx4  d6ax4d  d6axd4  d6d4ax  d6d4xa  d6da4x  d6dax4 
d6dx4a  d6dxa4  d6x4ad  d6x4da  d6xa4d  d6xad4  d6xd4a  d6xda4  da46dx  da46xd 
da4d6x  da4dx6  da4x6d  da4xd6  da64dx  da64xd  da6d4x  da6dx4  da6x4d  da6xd4 
dad46x  dad4x6  dad64x  dad6x4  dadx46  dadx64  dax46d  dax4d6  dax64d  dax6d4 
daxd46  daxd64  dd46ax  dd46xa  dd4a6x  dd4ax6  dd4x6a  dd4xa6  dd64ax  dd64xa 
dd6a4x  dd6ax4  dd6x4a  dd6xa4  dda46x  dda4x6  dda64x  dda6x4  ddax46  ddax64 
ddx46a  ddx4a6  ddx64a  ddx6a4  ddxa46  ddxa64  dx46ad  dx46da  dx4a6d  dx4ad6 
dx4d6a  dx4da6  dx64ad  dx64da  dx6a4d  dx6ad4  dx6d4a  dx6da4  dxa46d  dxa4d6 
dxa64d  dxa6d4  dxad46  dxad64  dxd46a  dxd4a6  dxd64a  dxd6a4  dxda46  dxda64 
x46add  x46dad  x46dda  x4a6dd  x4ad6d  x4add6  x4d6ad  x4d6da  x4da6d  x4dad6 
x4dd6a  x4dda6  x64add  x64dad  x64dda  x6a4dd  x6ad4d  x6add4  x6d4ad  x6d4da 
x6da4d  x6dad4  x6dd4a  x6dda4  xa46dd  xa4d6d  xa4dd6  xa64dd  xa6d4d  xa6dd4 
xad46d  xad4d6  xad64d  xad6d4  xadd46  xadd64  xd46ad  xd46da  xd4a6d  xd4ad6 
xd4d6a  xd4da6  xd64ad  xd64da  xd6a4d  xd6ad4  xd6d4a  xd6da4  xda46d  xda4d6 
xda64d  xda6d4  xdad46  xdad64  xdd46a  xdd4a6  xdd64a  xdd6a4  xdda46  xdda64 
Permutation : 540


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值