dmndxld

码不停题

对角线遍历

题目:给定一个含有 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要对齐才表示一个嵌套内

posted on 2019-05-04 10:24  imyourterminal  阅读(1154)  评论(0编辑  收藏  举报

导航