題目
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串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]);
}
}
};