题解 | #全排列#

全排列

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

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务