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()}; } };