- 递归解法,第一个元素拿出来,求出后面的全排列
- 需要注意相同的元素不替换
- 但是只是相同的元素不替换不能保证所有的不重复,还需要去重
- 去重需要先排序,再返回去重index,然后erase即可。
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> ret;
if(str.size()==0)
return ret;
if(str.size()==1){
ret.push_back(str);
return ret;
}
string str2="";
str2.insert(str2.end(),str.begin()+1,str.end());
vector<string> ret2=Permutation(str2);
ret=changeLoc(str[0],ret2);
sort(ret.begin(),ret.end());
auto index=unique(ret.begin(),ret.end());
ret.erase(index,ret.end());
return ret;
}
vector<string> changeLoc(char c,vector<string> ret2){
vector<string> ret;
for(string ss:ret2){
ss=c+ss;
for(int i=0;i<ss.size();i++){
string tmp=ss;
if(i==0 || c!=tmp[i]){
swap(tmp[0],tmp[i]);
ret.push_back(tmp);
}
}
}
return ret;
}
};