回溯算法

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