class Solution { public: vector<string> Permutation(string str) { vector<string> res; if (str.empty()) return res; find(res, 0, str); set<string> sset(res.begin(), res.end()); res.assign(sset.begin(), sset.end()); return res; } void find(vector<string> &res, int count, string str){ if (count == str.size()) res.push_back(str); for (int i = count; i != str.size(); ++i){ swap(str, i, count); find(res, count+1, str); swap(str, count, i); } } void swap(string &str, int a, int b){ auto temp = str[a]; str[a] = str[b]; str[b] = temp; } };
来一个超笨的方法,(之前参考LC中仿写过别人的,再写又不会了)
1、这是一个全排列问题,也就是排列组合中的排列问题,采用递归的思想:假设str中有9个字符,将每个字符放在第一位,然后递归,接着处理之后的8个字符,这样就可以考虑了所有的情况了。
2、因为题中说字符可能有重复,没想出什么好办法,用set中转一下。