最近看了一篇關於面試的文章,其中寫道:給定一個數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;
}