#include <iostream>
using namespace std;
void permutation(char* str,char *start)
{
if(*start=='\0')
cout<<str<<endl;
else
{
for(char* pchar = start;*pchar!='\0';++pchar)
{
char temp = *start;
*start = *pchar;
*pchar = temp;
permutation(str,start+1);
temp = *start;
*start = *pchar;
*pchar = temp;
}
}
}
int main()
{
char* str;
while(cin>>str)
{
permutation(str,str);
}
return 0;
}
另外一种结果返回方式
class Solution {
unordered_set<string> res;
vector<string>save;
public:
void perm(string& str, char *pbegin, char *pstr, unordered_set<string>& res)
{
if (*pstr == '\0')
{
res.insert(str);
}
else
{
// res.push_back(str);
for (char* ptr = pstr; *ptr != '\0'; ++ptr)
{
swap(*ptr, *pstr);
perm(str, pbegin, pstr + 1, res);
swap(*ptr, *pstr);
}
}
}
vector<string> Permutation(string str) {
if (str.length() == 0)
return save;
//res.push_back(str);
perm(str, &str[0], &str[0], res);
//res.pop_back();
for (unordered_set<string>::iterator it = res.begin(); it!=res.end(); ++it)
{
save.push_back(*it);
}
sort(save.begin(),save.end());
return save;
}
};