phpexcel遍历所有列_对角线遍历

本文介绍如何使用 PHPExcel 实现矩阵对角线遍历。通过分析矩阵元素,找出对角线遍历的规律,特别是对于大小为 MxN 的矩阵,当元素数量不超过 100000 时,如何进行有效的遍历策略。文章建议通过绘制更大规模的矩阵来辅助理解并找出规律。
摘要由CSDN通过智能技术生成

题目描述

给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

示例:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

输出:  [1,2,4,7,5,3,6,8,9]

解释:

754f29b8da4354ac0b408ed328453a44.png

说明:

  1. 给定矩阵中的元素总数不会超过 100000 。

分析与解答

关键在于找规律,将规律归类,但这并不容易。在找规律的时候往往更大的矩阵更容易发现,因为更大的场景会将主要规律凸显出来,自己可以画一个4行4列或5行5列的矩阵找下。

规律就两类,一类是斜上以及斜上到顶后向哪走;另一类是斜下以及斜下到底后向哪走。

class Solution:
    def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:
            return []

        R = len(matrix)
        C = len(matrix[0])
        i = j = 0
        l = [matrix[0][0]]
        while len(l) != R * C:
            # 第一类:斜上,这也是初始步骤
            # 首先能斜上就先斜上
            while i - 1 >= 0 and j + 1 < C:
                i = i - 1
                j = j + 1
                l.append(matrix[i][j])
            # 斜上到顶能右就右,不能右就下
            if j + 1 < C:
                j = j + 1
                l.append(matrix[i][j])
            elif i + 1 < R:
                i = i + 1
                l.append(matrix[i][j])

            # 第二类:斜下
            # 能斜下就斜下
            while i + 1 < R and j - 1 >= 0:
                i = i + 1
                j = j - 1
                l.append(matrix[i][j])
            # 斜下到底能下就下,不能下就右
            if i + 1 < R:
                i = i + 1
                l.append(matrix[i][j])
            elif j + 1 < C:
                j = j + 1
                l.append(matrix[i][j])

        return l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值