字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
代码
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> res;
int len = str.length();
if (len != 0){
sort(str.begin(), str.end()); //先按字典序排列字符串中的字母
vector<string> tmp;
if (len == 1){ //只有一个字母
tmp.push_back(str);
return tmp;
}
if (len == 2){ //只有两个字母
tmp.push_back(str);
if (str[0] == str[1])
return tmp;
swap(str[0], str[1]);
tmp.push_back(str);
return tmp;
}
for (int i = 0; i < len; i++){
string s = str;
char first = s[i]; //固定第i个元素,
if (i!=0 && s[0] == s[i])
continue;
swap(s[0], s[i]);
string next = s.substr(1, len - 1);
tmp = Permutation(next); //求剩余字符的排列
for (int j = 0; j < tmp.size(); j++){
res.push_back(first + tmp[j]);
}
}
}
return res;
}
};