语言:C++
思路:这题是一个无重复全排列问题,参考Leetcode上一个回溯+map的代码https://leetcode-cn.com/problems/permutations-ii/solution/c-jian-dan-hui-su-by-da-li-wang/,并做一定的修改
算法效率:
具体代码:

class Solution {
public:
    void backtrace(map<char,int>& m, int k, int n, string v, vector<string>& res){
        if (k==n)
        {
            res.push_back(v);
            return;
        }
        map<char,int>::iterator it;
        for(it = m.begin();it!=m.end();++it)
        {
            if (it->second == 0) continue;
            --it->second;
            string v_new;
            v_new = v + it->first;
            backtrace(m,k+1,n,v_new,res);
            ++it->second;
        }
    }
    vector<string> Permutation(string str) {
        vector<string> result;
        if(str.size()==0) return result;
        map<char,int> m;
        for (auto it: str)
            ++m[it];
        string v="";
        backtrace(m,0,str.size(),v,result);
        return result; 
    }
};