LeetCode:二維數組—對角線遍歷

點擊上方「藍字」關注咱們python




題目描述:「給定一個含有M*N個元素的矩陣,請以對角線遍歷的順序返回矩陣中的元素」nginx

(矩陣中元素<=10000)算法


示例:
json

matrix=[[1, 2, 3],[4, 5, 6],[7, 8, 9],]


[1, 2, 4, 7, 5, 3, 6, 8, 9]




算法思路數組


尋找元素遍歷的規律
微信


按照對角線將元素劃分,你會發現一些規律:
app

  • 將每個對角線上的元素各自當作一組,對角線數組的個數以下:
    (len(matrix)+len(matrix[0])-1)
  • 若是將對角線數組從左向右數,你會發現 第偶數個對角線數組 在讀取時應該 逆序 讀取
  • 最終要的規律:在同一個對角線數組中的元素下標以後相等


算法步驟:編輯器

  1.  先按照矩陣遍歷的正常順序遍歷元素,過程當中計算元素 下標和
  2. 將下標和同樣的元素存入對應的對角線數組中(設置一個 二維數組 存儲對角線數組)
    同時要注意: 二維數組中每個一維數組的對應下標其實正好就等於以前計算的元素下標記和
  3. 遍歷完成後,將對角線二維數組中的一維數組再添加到函數最後要返回的數組中。其中要進行判斷: 偶數個數組要逆序讀取



本文由「壹伴編輯器」提供技術支持函數

注意:
flex

  • 必定要判斷輸入爲 的狀況
  • 輸入可沒說必定是方陣,因此在本身舉例推導時不要取特殊狀況
  • 既然全部元素最終都要返回,那就先把每一個都考慮進單個數組,最後再排序



本文由「壹伴編輯器」提供技術支持


二維數組的建立問題


建立二維數組的坑


本文題目在以前的算法中一直這樣建立二維數組:

diagonal_list = [[]*(len(matrix)+len(matrix[0]-1)]

可是一直報錯


原來二維數組的建立有坑!!!!!!!!

a = [ []*3 ]a[0].append(1)
>>> a=[ [1], [1], [1] ]

都變成1了,可明明僅設置了第一個數組呀?????


原來:在建立一個若是利用乘法建立二維數組的話,或者不是二維數組,僅僅是一維數組乘以n,乘法表明的是引用,後面不論多少個數組都是引用第一個數組



本文由「壹伴編輯器」提供技術支持


正確的建立方法:利用for循環

a = [] for i in range(n)





本文分享自微信公衆號 - 小楊的python之路(gh_6ba152d49331)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索