498.对角线遍历
https://leetcode.cn/problems/diagonal-traverse/solution/by-qingfengpython-h6zl/
难度:中等
题目:
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
提示:
- m == mat.length
- n == mat[i].length
- 1 <= m, n <= 104
- 1 <= m * n <= 104
- -10^5 <= mat[i][j] <= 10^5
示例:
示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
示例 2:
输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]
分析
一道逻辑比较简单的模拟题目,可以不必考虑太多,仅关注 移动方向、边界 这两个问题即可。
- 起始点为row,col = [0,0],这个很明确
- 矩阵扫描的方向有两个[(1, -1), (-1, 1)],即左下↙,和右上↗。
- 扫描方向为右上↗,且坐标处于矩阵顶部和右边界时,当col未抵达右边界时,向右走一格,否则则向下走一格,并且转向左下↙
- 扫描方向为左下↙,且坐标处于矩阵左边界和底部时,当row未抵达底部时,向下走一格,否则向右走一格,并且转向右上↗
- 循环执行3、4,直至走到矩阵末端结束循环即可。
解题:
Python:
class Solution:
def findDiagonalOrder(self, mat):
choice = [(1, -1), (-1, 1)]
row, col, row_max, col_max, direction = 0, 0, len