#include <string> #include <vector> #include <map> using namespace std; void fill(string &s, map<char, int> &c2n, vector<string> &permutations, int len); void getPermutations(string s, vector<string> &permutations);
void getPermutations(string s, vector<string> &permutations) { map<char, int> c2n;
for(int i = 0; i < s.length(); i++) { if(c2n.find(s[i]) != c2n.end()) c2n[s[i]]++; else c2n[s[i]] = 1; } string ss; fill(ss, c2n, permutations, s.length()); }
void fill(string &s, map<char, int> &c2n, vector<string> &permutations, int len) { if(s.length() == len) //填充完毕
{ permutations.push_back(s); return; }
//遍历哈希表
for(map<char, int>::iterator it = c2n.begin(); it != c2n.end(); it++) { if(it->second > 0) //个数大于0
{ s.push_back(it->first); //填充字符串
it->second--; //个数减1
fill(s, c2n, permutations, len); //继续填充
s.erase(s.length() - 1); //删除该字符
it->second++; //个数加1
//回溯
} } }
|