class Solution { public: vector<string> Permutation(string str) { vector<bool> used(str.size(), false); backtracking(str, used); return res; } string path; vector<string> res; void backtracking(string& s, vector<bool>& used) { if(path.size() >= s.size()) { res.push_back(path); return ; } for(int i=0; i<s.size(); i++) { // 去重的逻辑: 使用过,或者前一个元素与当前元素相同并且被使用过就跳过。 if(used[i] || (i>0 && used[i-1] && s[i]==s[i-1])) continue; path.push_back(s[i]); used[i] = true; backtracking(s, used); used[i] = false; path.pop_back(); } } };