[问题描述]: 输出字符串的所有全排列,要求无重复字符串出现
[问题解决]:改算法的思想是从字符串排列的最小字符串出发,找到小一个比该字符串大的数据。
先对字符串排序,得到最小的排列串,然后
从字符串尾部开始找第一个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