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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索