题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
//递归实现,不知道有没有更好的办法
void sort(string& str)
{
for(int i=0;i<str.size();++i)
{
int min=i;
for(int j=i+1;j<str.size();++j)
{
if(str[min]>str[j])
{
min=j;
}
}
auto temp=str[min];
str[min]=str[i];
str[i]=temp;
}
}
void print_vec(vector<string>& vec,string str,string rest)
{
if(rest.size()==0)
{
if(find(vec.begin(),vec.end(),str)==vec.end())
vec.push_back(str);
return;
}
for(int i=0;i<rest.size();++i)
{
string temp1,temp2;
for(int j=0;j<rest.size();++j)
{
if(i!=j)
{
temp1.push_back(rest[j]);
}
}
temp2=str;
temp2.push_back(rest[i]);
print_vec(vec,temp2,temp1);
}
}
vector<string> Permutation(string str) {
vector<string> vec;
if(str.size()==0)return vec;
if(str.size()==1)
{
vec.push_back(str);
return vec;
}
print_vec(vec,string(),str);
return vec;
}