对角线遍历

Posted dmndxld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对角线遍历相关的知识,希望对你有一定的参考价值。

题目:给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

说明:

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

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

 思路:观察规律,主要思考这个矩阵是怎么遍历的,遍历方向如何,研究可得,遍历方向由元素所在行列和决定,为偶数向上,奇数向下。

所以,即先创建空列表,然后append迭代添加即可。 还是自己多画图找规律。

 

class Solution:
    def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
        if(matrix==[]):
            return []
        r=0
        c=0
        row=len(matrix)
        col=len(matrix[0])
        a=row*col
        res=[]
        for i in range(a):
            res.append(matrix[r][c])
            if((r+c)%2==0):
                if(c==col-1):
                    r=r+1
                elif(r==0):
                    c=c+1
                else:
                    r=r-1
                    c=c+1
            else:
                if(r==row-1):
                    c=c+1
                elif(c==0):
                    r=r+1
                else:
                    r=r+1
                    c=c-1
        return res

 

这里,编写时出了俩错,

第一个:r=0,c=0 不能这么写,应该改为r,c=0,0

第二个:python里面没有自增,自减;因为自增自减改变了对象本身,而Python的模型规定,数值对象是不可改变的。

第三个:if elif要对齐才表示一个嵌套内

以上是关于对角线遍历的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode498 对角线遍历[模拟] HERODING的LeetCode之路

对角线遍历

498#对角线遍历

498. 对角线遍历(LeetCode 华为专题)

LEETCODE 498. 对角线遍历

LeetCode4.Array and String — Diagonal Traverse 对角线遍历