题解 | #全排列#
全排列
https://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1
#include <iostream>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 7
int n;
//str字符串数组用于存储输入字符串
char str[maxn];
//用于实现字符和数字的映射,在这里用于记录键值表示的字符在当前排列中是否曾经出现过,若未出现,则对应值为0
map<char,int> mp;
//用于记录当前排列
char p[maxn];
//为p[v]选择合适的字符
void GeneratorP(int v){
//递归边界
if(v==n){
for(int i=0;i<n;i++) cout<<p[i];
cout<<endl;
return;
}
//递归体
for(int i=0;i<n;i++){
if(mp[str[i]]==0){
//这里是p[v],不要写成p[i]
p[v]=str[i];
mp[str[i]]=1;
GeneratorP(v+1);
mp[str[i]]=0;
}
}
}
int main() {
while(cin>>str){
//求char[]型数组的长度
n=strlen(str);
sort(str,str+n);
for(int i=0;i<n;i++) mp[str[i]]=0;
GeneratorP(0);
cout<<"\n";
}
return 0;
}
查看4道真题和解析
