问题描述
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.
Example:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,4,7,5,3,6,8,9]
图解:
Note:The total number of elements of the given matrix will not exceed 10,000.
对角线迭代和翻转
算法:
- 初始化数组 result,用于存储最后结果。
- 使用一个外层循环遍历所有的对角线。第一行和最后一列的元素都是对角线的起点。
- 使用一个内层 while 循环遍历对角线上的所有元素。可以计算指定对角线上的元素数量,也可以简单迭代直到索引超出范围。
- 因为不知道每条对角线上的元素数量,需要为每条对角线分配一个列表或动态数组。但是同样也可以通过计算得到当前对角线上的元素数量。
- 对于奇数编号的对角线,只需要将迭代结果翻转再加入结果数组即可。
Python
class Solution:
def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
# Check for empty matrices
if not matrix or not matrix[0]:
return []
# Variables to track the size of the matrix
N, M = len(matrix),