最近看了一篇关于面试的文章,其中写道:给定一个数n,打印1到n位数的所有数字。对于这样的题目,最先想到的就是用数字的思维思考,就想到若n为7,那就是打印1到9999999。这样思维就被固定死了。例如给定100,这样你能打印出来吗?所以就需要换一个思维来思考这个问题。我们若把这个打印当成是一个全排列那么就容易的多了。那么问题来了,全排列如何实现呢?
其实实现起来不是那么容易,下面是参考别人的例子写出来的。
#include <stdio.h>
#include <string.h>
void swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
void arrange(char *str, int start, int end)
{
int i;
if(start == end)
{
printf("%s\n",str);
}else{
for(i = start; i < end; i++)
{
swap(str+start,str+i);
arrange(str,start+1,end);
swap(str+start,str+i);
}
}
}
int main(void)
{ char str[] = "01234";
int len = strlen(str);
arrange(str,0,len);
return 0;
}