全排列

全排列

http://www.nowcoder.com/questionTerminal/5632c23d0d654aecbc9315d1720421c1

这才是面试官想要的答案。

#include<iostream>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
string s;
map<string,int> mp; 
void swap(char &x,char &y){
    char temp=x;
    x=y;
    y=temp;
}
void dfs(int now){
    if(now==s.size()){
        mp[s]=1;
        return ;
    }
    for(int i=now;i<s.size();i++){
        swap(s[now],s[i]);
        //cout<<"convert to:"<<s<<endl;
        dfs(now+1);
        swap(s[now],s[i]);
        //cout<<"convert back:"<<s<<endl;
    }
}
int main(){
    cin>>s;
    dfs(0);
    for(auto i=mp.begin();i!=mp.end();i++){
        cout<<i->first<<endl;
    }
    return 0;
} 
全部评论
补充一下:大佬的代码除了递归的思想还有一个点需要注意,就是用了map而不是vector。因为递归只能找出所有的排列,并不能保证是按照字典序排序的。所有用map,map底层是红黑树,内部仍然是有序的。
6 回复 分享
发布于 2022-09-03 09:55 吉林
思路好清晰呀
点赞 回复 分享
发布于 2021-09-17 20:06

相关推荐

点赞 评论 收藏
分享
评论
32
2
分享

创作者周榜

更多
牛客网
牛客企业服务