498. 对角线遍历https://leetcode.cn/problems/diagonal-traverse/
给你一个大小为
m x n
的矩阵mat
,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
思路:简单模拟.观察得到,若是想遍历整个矩阵,则行下标i,必然经历一个从左上到右下,且沿着左外侧逐渐下降的过程.则由于是蛇形排列,所以用一个变量来标记,若为反向遍历顺序的对角线,则在正向遍历之后将list反转,再加入re结果列表中.
附上python代码:
class Solution:
def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
m = len(mat)#行
n = len(mat[0])#列
re = []
flag = 0#标记,正反
i, j = 0, 0
while (i < m and j < n):
temp = []
temp.append(mat[i][j])
t_i, t_j = i - 1, j + 1
while ( t_i >= 0 and n > t_j ):
temp.append(mat[t_i][t_j])
t_i, t_j = t_i - 1, t_j + 1
if flag :
temp.reverse()
flag = not flag
re.extend(temp)
if (i < m - 1):
i += 1
elif (i == m -1):
j += 1
return re
提交结果: