题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
class Solution {
public:
vector<string> Permutation(string str) {
if(str.size()==0)
return res;
core(str,0);
for(set<string>::iterator iter=resset.begin();iter!=resset.end();iter++){
res.push_back(*iter);
}
return res;
}
void core(string str,int n){
if(n==str.size())
resset.insert(str);
else{
core(str,n+1); //这一句一定要加,不然输入str=a ,结果就不会包含 n+1 为空的情况
for(int i=n+1;i<str.size();i++){
if(str[i]!=str[n]){
char temp=str[n];
str[n]=str[i];
str[i]=temp;
core(str, n+1);
temp=str[n];
str[n]=str[i];
str[i]=temp;
}
}
}
}
public:
vector<string> res;
set<string> resset;
};