DFS + 回溯
class Solution {
public:
void perm(int start, string str, set<string> &ans) {
if (start + 1 == str.size()) {
ans.insert(str);
return;
}
for (int i = start; i < str.size(); ++i){
if (i > start && str[i] == str[i-1]) continue; // 去重
swap(str[start], str[i]);
perm(start+1, str, ans);
swap(str[start], str[i]);
}
}
vector<string> Permutation(string str) {
if (str.empty()) return {};
set<string> ans;
sort(str.begin(), str.end());
perm(0, str, ans);
return vector<string>{ans.begin(), ans.end()};
}
};


京公网安备 11010502036488号