[ 伪代码描述 ]
void Permutation(需要处理的字符串, 需要进行处理的字符串的起始位置)
{
if(扫描完成整个字符串)
输出当前字符串;
for(对即将处理的字符串中的每个字符)
{
将当前的字符提前到第一个位置;
求除了第一个字符外,后面所有字符的全排列;
将提前到第一个位置的字符恢复到未提前之前的位置,以便不影响下次的处理;
}
}
[ C++实现 ]
template <typename T>
void CalcAllPermutation(T perm[], int first, int num)
{
if (num <= 1)
return;
for (int i = first; i < first + num; ++i)
{
swap(perm[i], perm[first]);
CalcAllPermutation(perm, first + 1, num - 1);
swap(perm[i], perm[first]);
}
}