题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
void Per(int begin,string &str,vector<string> &a,int len){
if(str[begin] == '\0'){
a.push_back(str);
return;
}
char temp;
for(int i = begin;i <len;i++){
if(i == begin || str[i] != str[begin]){ //有重复的字符跳过不交换
temp = str[i];
str[i] = str[begin];
str[begin] = temp;
Per(begin+1,str,a,len);
temp = str[i];
str[i] = str[begin];
str[begin] = temp;
}
}
}
public:
vector<string> Permutation(string str) {
int len = str.length();
vector<string> vec;
if(len == 0)
return vec;
Per(0,str,vec,len);
sort(vec.begin(),vec.end());//保证按字典序排列
return vec;
}