字符串的排列,c++
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
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中转一下。
