题解 | #全排列#
全排列
https://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int jie_cheng(int n){
if(1==n){
return 1;
}
return n* jie_cheng(n-1);
}
bool comp(string lhs,string rhs){
int i=0;
while(true){
if(lhs[i]<rhs[i]){
return true;
}else if(lhs[i]==rhs[i]){
i++;
}else{
return false;
}
}
}
char arr[800][10];
void arrange(string str){
if(1==str.size()){
arr[0][0]=str[0];
return;
}
char character=str[0];
str.erase(str.begin());
arrange(str);
int size=str.size();
int col= jie_cheng(size);
int cur=0;//新数组的当前行数
//暂存原数组
char arr_before[800][10];
for(int k=0;k<col;k++){
for(int kdx=0;kdx<size;kdx++){
arr_before[k][kdx]=arr[k][kdx];
}
}
for(int i=0;i<col;i++){
char before[10];
//暂存原数组的每一行
for(int idx=0;idx<size;idx++) {
before[idx] = arr_before[i][idx];
}
//插入
for(int pos=0;pos<=size;pos++){//pos代表要插入的位置
char before_insert[10];
for(int mdx=0;mdx<size;mdx++){
before_insert[mdx]=before[mdx];
}
for(int j=size-1;j>=pos;j--){
before_insert[j+1]=before[j];
}
before_insert[pos]=character;
for(int m=0;m<size+1;m++){
arr[cur][m]=before_insert[m];
}
cur++;
}
}
}
int main() {
char arr_model[10];
scanf("%s",arr_model);
string str=arr_model;
arrange(str);
string pstr[800];
int num= jie_cheng(str.size());
for(int i=0;i<num;i++){
pstr[i]=arr[i];
}
sort(pstr,pstr+num,comp);
for(int j=0;j<num;j++){
printf("%s\n",pstr[j].c_str());
};
}
全排列的笨办法,弄了俩小时Orz求各位大佬不要嘲笑我555C++的STL库都没怎么学
