一种是利用递归解,另一种参考C++ STL算法next_permutation的思想.
#include<map>
#include<iostream>
#include<queue>
#include<string>
#include<pthread.h>
#include<algorithm>
#include<numeric>
#include<string>
using namespace std;
void perm(string& s,int index){
if(index==s.length()){
cout<<s<<endl;
return ;
}
for(int i=index;i<s.length();++i){
swap(s[index],s[i]);
perm(s,index+1);
swap(s[index],s[i]);
}
}
void perm2(string s,size_t len){
if(len<1) return ;
int i,j,k;
while(true){
for(i=len-2;i>=0;--i){
if(s[i]<s[i+1]){
break;
}
}
if(i<0)
break;
for(k=len-1;k>i;--k){
if(s[k]>s[i]) break;
}
swap(s[i],s[k]);
reverse(s.begin()+i+1,s.end());
cout<<s<<endl;
}
}
int main(){
string s="abcde";
//perm(s,0);
perm2(s,s.length());
return 0;
}