输入一个字符串,打印出该字符串中所有字符的全排列。
如:输入字符串“abc”所能排列出来的所有字符串为:“abc”,”acb”,”bac”,”bca”,”cab”,”cba”.
解法一:递归实现
可以按照下述步骤执行:
*将a固定在第一位,求后面bc的排列,得到:”abc”,”acb”.
*将b固定在第一位,求后面bc的排列,得到:”bac”,”bca”.
*将c固定在第一位,求后面bc的排列,得到:”cab”,”cba”.
参考代码如下:
void CalcAllPermutation(char *perm, int from, int to)
{
if (to<=1)
{
return;
}
if (from == to)
{
for (int i = 0; i < to; i++)
{
cout << perm[i];
}
cout << endl;
}
else
{
for (int j = from; j <= to; j++)
{
swap(perm[j], perm[from]);
CalcAllPermution(perm, from + 1, to);
swap(perm[j], perm[from]);
}
}
}