题目内容:
对字符串(数字,字母,符号)进行全排列,并统计全排列的种树
输入描述
输入一个字符串
输出描述
输出字符串的全排列,每种情况占一行,最后一行输出全排列的个数
输入样例
123
输出样例
123
132
213
231
312
321
6
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
string str;
int coun;
string s[100];
int mySwap(int i, int j){
char temp;
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
int isswap(int i, int j){
for(int k = i; k < j; k++){
if(str[k] == str[j])
return 0;
}
return 1;
}
int allpai(int i, int n){
int j;
if(i == n - 1){
// cout << str << endl;
s[coun++] = str;
}
else{
for(int j = i; j < n; j++){
if(isswap(i, j)){
mySwap(i, j); //for循环每一次交换第一个与后面的每一个的位置
// cout << "test1 : i j " << i << " " << j << " str " << str << endl;
allpai(i + 1, n); //从i = 0开始即确定了第一个位置,重复上面for循环动作,依次确定第二个位置
mySwap(j, i); //对到初始状态,为下个for循环做准备
// cout << "test1 : i j " << i << " " << j << " str " << str << endl;
}
}
}
}
bool cmp(string a, string b){
return a < b;
}
int main(){
cin >> str;
allpai(0, str.length());
// cout << "sort" << endl;
sort(s, s + coun, cmp);
for(int i = 0; i < coun; i++)
cout << s[i] << endl;
cout << coun;
return 0;
}