简单构造法:
n=1时,S=a1, 只有字符串a1;
n=2时,S=a1a2,有2种排列组合,a1a2,a2a1
n=3时,S=a1a2a3,排列组合为,a3a1a2, a1a3a2, a1a2a3, a3a2a1, a2a3a1, a2a1a3
根据f(n-1)求f(n),将an插入到f(n-1) 的所有字符串的任意位置。
C++实现:
#include <string>
#include <vector>
using namespace std;
vector<string> getPerms(string str)
{
if (str.size() == 0)
return vector<string>();
vector<string> allperms;
allperms.push_back("");
for(string::iterator iter = str.begin(); iter != str.end(); ++iter)
{
char item = *iter;
vector<string> words;
for(vector<string>::iterator it = allperms.begin(); it != allperms.end(); ++it)
{
for(string::size_type i = 0; i <= (*it).size(); ++i)
{
string word = (*it);
word.insert(i, 1, item);
words.push_back(word);
}
}
allperms.swap(words);
}
return allperms;
}