回溯+Map
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
语言: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; } };