语言: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;
}
};


京公网安备 11010502036488号