1.问题描述
输入一串数字,打印出该数组中数字的全排列,例如 1 2 3 的全排列包括 123,132,213,231,312,321.(来自《剑指offer》)
2.分析
我们可以分成两步 1.把第一个数字和后面的数字交换。2. 固定一个数字求后面数字的全排列。
3.代码
#include <stdio.h>
void swap(int *one,int *two)
{
int temp = *one;
*one = *two;
*two = temp;
}
void permutation(int* arr,int begin,int length)
{
if (arr == NULL)
{
return;
}
if (begin == length)
{
for (int i = 0; i < length; i++)
{
printf("%3d",arr[i]);
}
printf("\n");
}
else
{
for (int j = begin; j < length; j++)
{
swap(arr + begin, arr + j);
permutation(arr, begin + 1, length);
swap(arr + begin, arr + j);
}
}
}