题解 | #全排列#

全排列

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;
}

全部评论

相关推荐

点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:35
程序员小白条:话太多,没实力和学历,差不多回答回答就行了,身份地位不一样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务