回溯算法
class Solution {
public:
vector<string> vec;
string s = "";
void Backtrack(string str, vector<bool> &used){
if(s.size() == str.size()){
vec.push_back(s);
return;
}
for(int i = 0; i < str.size(); i++){
if(i > 0 && str[i]==str[i-1] && used[i-1]==false) continue;
if(!used[i]){
used[i] = true;
s+=str[i];
Backtrack(str, used);
s.pop_back();
//s.erase(s.end()-1);
used[i] = false;
}
}
}
vector<string> Permutation(string str) {
vec.clear();
sort(str.begin(),str.end());
vector<bool> used(str.size());
Backtrack(str, used);
return vec;
}
};
京公网安备 11010502036488号