前几天的一道面试题目,要求输入4个数进行全排列并进行按行输出,精髓在于运用递归的思想。
1,2两个数的全排列是{1,2}、{2,1},1,2,3三个数的全排列是{1,2,3}、{1,3,2}、{2,1,3},{2,3,1}、{3,1,2}、{3,2,1},根据以上规律可以看出,假如有n个数则它的全排列是以n个数开头的(n-1)的全排列,以此类推
以下个人的代码片段:#include <iostream>
#include <algorithm>
using namespace std;
int n = 0;
bool IsSwap(int list[], int k, int m)
{
for (int i = k; i < m; i++)
if (list[i] == list[m])
return true;
return false;
}
void FullPerm(int list[], int k, int m)
{
if (k == m)
{
for (int i = 0; i < 3; i++)
cout << list[i] << " ";
cout << endl;
n++;
}
else
{
for (int i = k; i <= m; i++)
{
if (!IsSwap(list, k, i))
{
swap(list[i], list[k]);
FullPerm(list, k + 1, m);
swap(list[i], list[k]);
}
}
}
}
int main()
{
int list[4] = { 1,2,3,4 };
FullPerm(list, 0, 3);
cout << "全排列数量:" << n << endl;
system("pause");
return 0;
}