498.对角线遍历 模拟矩阵扫描 Python&Java解题

这是一篇关于LeetCode第498题《对角线遍历》的解题文章。题目要求以对角线顺序返回矩阵的所有元素。解题思路涉及模拟矩阵扫描,从左上到右下,遇到边界时改变方向。提供了Python和Java两种解题代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]

分析

一道逻辑比较简单的模拟题目,可以不必考虑太多,仅关注 移动方向、边界 这两个问题即可。

  1. 起始点为row,col = [0,0],这个很明确
  2. 矩阵扫描的方向有两个[(1, -1), (-1, 1)],即左下↙,和右上↗。
  3. 扫描方向为右上↗,且坐标处于矩阵顶部和右边界时,当col未抵达右边界时,向右走一格,否则则向下走一格,并且转向左下↙
  4. 扫描方向为左下↙,且坐标处于矩阵左边界和底部时,当row未抵达底部时,向下走一格,否则向右走一格,并且转向右上↗
  5. 循环执行3、4,直至走到矩阵末端结束循环即可。

解题:

Python:

class Solution:
    def findDiagonalOrder(self, mat):
        choice = [(1, -1), (-1, 1)]
        row, col, row_max, col_max, direction = 0, 0, len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值