这道题需要用到递归的思想,可以将字符串分为两部分,一部分为已经排列好的,另一部分为待排列的,然后对待排列的部分依次遍历选择一个字符放到已经排列好的部分中,依次递归直至所有字符都已排列好为止:
// #include <bits/stdc++.h>
// using namespace std;
// int main(){
// for(string s;cin>>s;cout<<endl){
// sort(s.begin(),s.end());
// for(cout<<s<<endl;next_permutation(s.begin(),s.end());cout<<s<<endl);
// }
// return 0;
// }
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void func(string s, int n){
if(n == 1) cout<<s<<endl;
else{
int len = s.size();
for(int i = 0;i < n;i++){
string temp(s);
char ch = temp[len - n + i]; //从待排列的部分中依次选择一个字符
temp.erase(len - n + i, 1); //将该字符从原来的位置移动到新的位置上
temp.insert(len - n, 1, ch);
func(temp, n - 1);
}
}
}
int main(){
string s;
while(cin>>s){
sort(s.begin(), s.end()); //将字符串按照字典序进行排列
func(s, s.size());
cout<<endl;
}
return 0;
}