前言
研究生大部分时间都是要写C和C++了。为了熟悉语言和基本库,并且作为锻炼思维的一种手段。在51node上面做做算法题吧。
题目
解法
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
//获得独立数字
vector<char> getNum(const string s){
vector<char> cs;
for(int i=0;i<s.size();i++){
cs.push_back(s[i]);
}
return cs;
}
//全排列 cs:单个数字数组 index:当前递归深度,初始为0
void allSort(vector<char> cs,int index,vector<string> *an){
if(index==cs.size()-1){
string temp="";
for(int i=0;i<cs.size();i++)
temp.insert(temp.begin()+i,cs[i]);
an->push_back(temp);
}else{
for(int i=index;i<cs.size();i++){
swap(cs[index],cs[i]);
allSort(cs,index+1,an);
swap(cs[index],cs[i]);
}
}
}
int main(){
string s;
cin>>s;
vector<string> an;
vector<char> cs=getNum(s);
allSort(cs,0,&an);
//为了AC输出调整
sort(an.begin(),an.end());//排序
vector<string>::iterator iter=unique(an.begin(),an.end());
an.erase(iter,an.end());//消除重复
for(int i=0;i<an.size();i++)
cout<<an[i]<<endl;
return 0;
}
总结
1。刚开始题目没看清就写也是作孽
2。为了AC输出是有讲究的
3。全排列使用递归算法完成的,记得大二时候上算法课讲过的。