题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
分析
递归方式打印,例如abc,那就打印a与所有的bc的排列组合。
但在最后需要倒转后变成abc的字典序列。
代码实现:
vector<string> Permutation(string str ) {
vector<string>res ;
if(str.size()<=0){
return res;
}
permutation( str, 0 ,res);
sort(res.begin(),res.end());
return res;
}
void permutation(string str, int start , vector<string>&res) {
if (start == str.size() ) {
res.push_back(str);
}
else {
for (int j = start; j < str.size() ; j++) {
if( j!=start && str[j]==str[start]){
continue;
}
swap(str[start], str[j]);
permutation(str, 1 + start, res);
swap(str[start], str[j]);
}
}
}