题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
解法:
class Solution {
public:
vector<string> Permutation(string str)
{
if(str.size() == 0) return {};
sort(str.begin(), str.end());
vector<string> res;
solution(str, 0, res);
return res;
}
void solution(string str, int start, vector<string> &res)
{
if(start == str.size())
{
res.push_back(str);
return;
}
for(int i = start; i < str.size(); ++i)
{
if(i > start && str[i] == str[start])
continue;
swap(str[i], str[start]);
solution(str, start+1, res);
}
}
};