题目:如对"abc",输出它的全排列,应该共有3! = 6种。
#include <iostream>
#include <list>
#include <string>
using namespace std;
list<string> getPerms(string s)
{
list<string> perms;
if(s.length() == 1)
perms.push_back(s);
else
{
list<string> subperms = getPerms(s.substr(1));
for(list<string>::iterator it = subperms.begin(); it!= subperms.end(); it++)
{
string p = s[0] + *it;
perms.push_back(p);
for(int i = 1; i < p.length(); i++)
{
char tmp = p[0];
p[0] = p[i];
p[i] = tmp;
perms.push_back(p);
tmp = p[0];
p[0] = p[i];
p[i] = tmp;
}
}
}
return perms;
}
int main()
{
string s = "abc";
list<string> perms = getPerms(s);
for(list<string>::iterator it = perms.begin(); it!= perms.end(); it++)
{
cout << *it << endl;
}
while(1);
}