Python實現順時鐘回形矩陣

來源:互聯網
上載者:User

標籤:

  無意間在網上看到了一個面試題是,寫出一個回形矩陣。實現的效果大致如下:  

  [ 1,   2,   3,   4, 5]
  [16, 17, 18, 19, 6]
  [15, 24, 25, 20, 7]
  [14, 23, 22, 21, 8]
  [13, 12, 11, 10, 9]

  因為日常都是使用Python,剛開始覺得使用list的append方法就可以做出來,動手一下發現還是不行的。後來,覺得應該先根據參數容量製作一個list,用list的替換方法來做替換。處理的過程中,還是發現有很多思維斷掉的地方。

  最後,在別人的部落格上看到2004年,有人用Python實現了逆時鐘方向的回形矩陣。借鑒了一下他的方法。大致的思路是這樣的:

  第0步:回形矩陣的特點是什嗎?

  順時鐘回形矩陣,在等差值為1的情況下,按照一個回形為一層的情況來看:

  推導的前三條矩陣邊上的 “結束值” - “起始值” = “矩陣邊長”-1,第四條矩陣邊的 "結束值" 為 該層的起始值。

  [ 1, 2, 3, 4,  5]

  [16,   ,   ,   , 6]

  [15,   ,   ,   , 7]

  [14,   ,   ,   , 8]

  [13,12,11,10,9]

  

  第一步,根據設定的矩陣邊長,產生一個二維數組(C語言中這麼描述,Python就是list裡面嵌套list)

1 for i in range(size):2         arry.append(range(size))

  第二步,按照矩陣邊長產生該層的資料池:

1 while size >0 :2     create pool()3     layer += 1        4     size -= 2

  最終代碼:

  

 1 #!/usr/bin/env python 2 # coding: utf-8 3  4  5 def draw_matrix(begin, size, layer, arry, controlle_num): 6     # 以順時鐘方向建立遞增矩陣,按照層級 7     # 根據遞增1的特點,建立當前層的上下左右,四個list,形成資源集區 8     # 每個方向list的長度都等於size的長度 9     # [1,2,3]10     # [8, ,4]11     # [7,6,5]12     top = range(begin, begin+size)13     right = range(begin+size-1, begin+size*2-1)14     bottom = range(begin+size*2-2, begin+size*3-2)15     left = range(begin+size*3-3, begin+size*4-3)16     left[size-1] = begin       # 順時鐘的左list最後一個值改為起始值17 18     # size相當矩陣的邊長,i既可以表示長,也可以表示寬19     # 通過i步進來從本層的資源集區裡面取得各個值20     for i in range(size):21         arry[layer][layer+i] = top[i]      22         arry[layer+i][controlle_num-layer-1] = right[i]23         arry[controlle_num-layer-1][controlle_num-layer-i-1] = bottom[i]24         arry[controlle_num-1-layer-i][layer] = left[i]25     return arry26 27 28 def Matrix(size, begin=1, layer=0):29     controlle_num = size30     arry = []31     for i in range(size):32         arry.append(range(size))33     while size > 0:34         arry = draw_matrix(begin, size, layer, arry, controlle_num)35         begin = begin+(4*(size-1))36         size = size - 237         layer = layer + 138     return arry39 40 41 if __name__ == ‘__main__‘:42     dat = Matrix(5)43     for i in range(5):44         print dat[i]

 

Python實現順時鐘回形矩陣

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.