对角线遍历 Diagonal Traverse

该博客介绍了一种按对角线顺序返回矩阵所有元素的方法,适用于给定的MxN矩阵。以示例解释了算法思路,并提供了Python和C++的代码实现。在遍历对角线时,对于奇数编号的对角线,需要进行翻转操作。
摘要由CSDN通过智能技术生成

问题描述

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.

对角线迭代和翻转

算法:

  1. 初始化数组 result,用于存储最后结果。
  2. 使用一个外层循环遍历所有的对角线。第一行和最后一列的元素都是对角线的起点。
  3. 使用一个内层 while 循环遍历对角线上的所有元素。可以计算指定对角线上的元素数量,也可以简单迭代直到索引超出范围。
  4. 因为不知道每条对角线上的元素数量,需要为每条对角线分配一个列表或动态数组。但是同样也可以通过计算得到当前对角线上的元素数量。
  5. 对于奇数编号的对角线,只需要将迭代结果翻转再加入结果数组即可。
    对角线遍历

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), 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值