面試題-螺旋矩陣

imageimage

 

 

      小弟不才,若有高手路過,請多指點,不勝榮幸!

      話說,今日參加一家公司面試,要求實現如上如這種矩陣,初一看 ,就一矩陣,信誓旦旦的以爲很簡單呢,結果開始寫代碼的時候才發現這不是一般的矩陣,而是一隻蝸牛呀,直接昏倒!老實說,小弟當時被這隻蝸牛嚇到了,然後果斷放棄了,答了剩下的題。至於面試結果如何,且聽有機會的時候分解!

     


面試受挫,但我不能停止前進的腳步,歸來之後仔細研究了一下,發現瞭如下 規律:

 

image

      如此圖所示,最外層的規律便是紅線所示的四組數組成的,哈 ,既然發現了規律 ,那麼繁瑣的工作就交給計算機來完成了,那麼,我就先嚥下第一口芥末嘍:

 

  


  Step1:實現紅線1

 

image       image實現結果

首先,做些準備工作吧

 

   1:             int num=0;
   2:              Console.WriteLine("請輸入矩陣的長度:");
   3:              string getKeys= Console.ReadLine();
   4:              int.TryParse(getKeys, out num); //輸入數組長度
   5:              int[,] dataArray =new int[num,num]; 
   6:              int y=0;  //設置初始值,線一開始位置 座標 x,y
   7:              int x=0;  
   8:              int number=1;   //蝸牛的起點

 

 

線1的實現就很簡單了,簡單的一個循環

   1:   
   2:   int startX = x;
   3:   int startY = y;
   4:   while (y < num-1)
   5:   {
   6:       dataArray[startX, y] = number;
   7:       number++;
   8:       y++;
   9:   }

 

  


Step2:實現整個外圍

 

後面的座標變化,還是直接上圖吧:

image

既然知道了座標是怎麼變化的,那麼就通過一些列的循環賦值吧!

   1:   int startX = x;
   2:   int startY = y;
   3:   while (y < num-1)
   4:   {
   5:       dataArray[startX, y] = number;
   6:       number++;
   7:       y++;
   8:   }
   9:   while (x < num - 1)
  10:   {
  11:       dataArray[x, y] = number;
  12:       number++;
  13:       x++;
  14:   }
  15:   
  16:   while (y > startX)
  17:   {
  18:   
  19:       dataArray[x, y] = number;
  20:       number++;
  21:       y--;
  22:   }
  23:   while (x > y)
  24:   {
  25:       dataArray[x, y] = number;
  26:       number++;
  27:       x--;
  28:   }

image

 

好一個偷心的賊,這樣的結果誰都不能接受啊!下一步,u=3562504208,2026535318&fm=59

 

 

 

 

 

 

 

 

 

 

 


Step3:還你一顆真誠的心!

  

image

 

哈  ,原來內部也是有規律的  ,這個時候,是不是要遞歸一下呢?

大笑

   1:   private static int First(int num, int[,] dataArray,  int y,  int x, int number)
   2:   {
   3:       
   4:       int startX = x;
   5:       int startY = y;
   6:       #region 實現蝸牛的圍牆
   7:              while (y < num - 1)
   8:              {
   9:                  dataArray[startX, y] = number;
  10:                  number++;
  11:                  y++;
  12:              }
  13:              while (x < num - 1)
  14:              {
  15:                  dataArray[x, y] = number;
  16:                  number++;
  17:                  x++;
  18:              }
  19:   
  20:              while (y > startX)
  21:              {
  22:   
  23:                  dataArray[x, y] = number;
  24:                  number++;
  25:                  y--;
  26:              }
  27:              while (x > y)
  28:              {
  29:                  dataArray[x, y] = number;
  30:                  number++;
  31:                  x--;
  32:              } 
  33:              #endregion
  34:       num -= 1;
  35:       startX++;
  36:       startY++;
  37:       if (num > 2)
  38:       {
  39:           return First(num, dataArray, startY, startX, number);
  40:       }
  41:       else
  42:       {
  43:           return 0;
  44:       }
  45:   }

image  哇塞,終於完成了!!!!!!!!!!!


 

images

 

 

如果,我輸入的是一個奇數呢?

imageimage

 


 

521778350_186903492_DUDE_WTF_IS_WRONG_WITH_YOU_answer_8_xlarge_xlarge

此處只貼代碼了

         if (num % 2 != 0)// 判斷矩陣長度是否爲奇數
            {
                dataArray[num / 2, num / 2] = num * num;
            }

咖啡杯所有源代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章