题目
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba,注意可能有字符重复。
思路
对当前字符串进行全排列,注意跳过字符重复的情况。
参考代码
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> ans;
if (!str.length()) return ans;
GetPermutation(ans, str, 0, str.length());
sort(ans.begin(), ans.end());
return ans;
}
private:
void GetPermutation(vector<string>& ans, string& str, int index, int length) {
if (index == length - 1) {
ans.push_back(str);
return;
}
for (int i = index; i < length; ++i) {
// 跳过重复的字符
if (i != index && str[i] == str[index]) continue;
swap(str[i], str[index]);
GetPermutation(ans, str, index + 1, length);
swap(str[i], str[index]);
}
}
};