全排列的實現

最近看了一篇關於面試的文章,其中寫道:給定一個數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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章