输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:题目中会出现重复的字母,这里采用了取巧的办法,使用了C++的map来实现,首先map可以过滤到重复的字符串,其次map还可以自动排序,所以只用递归求字符串排列就可以了。当然了如果采用其他办法,过滤了重复字符串,最后采用桶排序顺序输出应该更简单一点吧。其实最取巧的莫过于采用STL中的next_permutation,一个函数解决所有问题。
class Solution {
public:
mapmap_t;
int togetherstr(string str,vector ve)
{
if(ve.size()==0)
{
map_t[str]++;
return 1;
}
for(int i=0;ivec = ve;
string stri = str+vec[i];
vec.erase(vec.begin()+i);
togetherstr(stri,vec);
}
return 1;
}
vector Permutation(string str)
{
vectorres;
vectorvec;
int len = str.length();
for(int i=0;i ve = vec;
string stri = ve[i];
ve.erase(ve.begin()+i);
togetherstr(stri,ve);
}
map::iterator iter;
for(iter = map_t.begin();iter!=map_t.end();iter++)
{
res.push_back(iter->first);
}
return res;
}
};