Leetcode 498.对角线遍历
1 题目描述(Leetcode题目链接)
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
说明:给定矩阵中的元素总数不会超过 100000 。
2 题解
暴力遍历每一条对角线
class Solution:
def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return []
res = []
m, n = len(matrix), len(matrix[0])
i, j = 0, 0 # i, j表示对角线起点,选取矩阵的最左边一列和最下方一列作为起点
tag = 0 #标志位表示是否需要反转
while j < n:
x, y = i, j
cur = []
while x >= 0 and y < n: #向右上方遍历
cur.append(matrix[x][y])
x, y = x - 1, y + 1
if tag: # 判断是否需要反转
res += cur[::-1]
tag = 0
else:
res += cur
tag = 1
if i == m - 1: # 下一个起点的位置
j += 1
else:
i += 1
return res