当前位置: 首页 > news >正文

算法练习-遍历对角线

原题链接:https://leetcode.cn/problems/diagonal-traverse/description/?envType=daily-question&envId=2025-08-25

代码功能

  • 输入:一个二维矩阵(列表的列表)

  • 输出:按对角线顺序遍历的所有元素组成的列表

  • 遍历方向:从左上角开始,先向右上方向遍历,然后向左下方向,交替进行

代码逐行解释

from typing import List  # 导入类型注解模块,用于指定函数参数和返回值的类型class Solution:def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:# 处理空矩阵的情况if not mat or not mat[0]:return []  # 如果矩阵为空或没有行,返回空列表m, n = len(mat), len(mat[0])  # 获取矩阵的行数(m)和列数(n)ans = []  # 初始化结果列表# 遍历所有可能的对角线(从左上到右下,对角线数量为m+n-1)for k in range(m + n - 1):# 计算当前对角线的列索引范围min_col = max(0, k - m + 1)  # 当前对角线的最小列索引max_col = min(k, n - 1)      # 当前对角线的最大列索引if k % 2 == 0:  # 如果k是偶数,从左下到右上遍历# 从左到右遍历(列索引从小到大)for j in range(min_col, max_col + 1):i = k - j  # 计算行索引(因为i+j=k)ans.append(mat[i][j])  # 将当前元素添加到结果列表else:  # 如果k是奇数,从右上到左下遍历# 从右到左遍历(列索引从大到小)for j in range(max_col, min_col - 1, -1):i = k - j  # 计算行索引ans.append(mat[i][j])  # 将当前元素添加到结果列表return ans  # 返回最终结果

示例说明

假设有一个2×3矩阵:

[[1, 2, 3],[4, 5, 6]
]

遍历顺序将是:

  1. 第一条对角线 (k=0): [1]

  2. 第二条对角线 (k=1): [2, 4](由于k=1是奇数,从右到左遍历)

  3. 第三条对角线 (k=2): [5, 3](由于k=2是偶数,从左到右遍历)

  4. 第四条对角线 (k=3): [6]

最终结果: [1, 2, 4, 5, 3, 6]

关键点

  1. 每条对角线上的元素满足:行索引 + 列索引 = k(当前对角线编号)

  2. 遍历方向交替变化:偶数对角线从左下到右上,奇数对角线从右上到左下

  3. 通过计算min_col和max_col确定每条对角线的列索引范围

http://www.dtcms.com/a/350477.html

相关文章:

  • 开源夜莺里如何引用标签和注解变量
  • VTK开发笔记(四):示例Cone,创建圆锥体,在Qt窗口中详解复现对应的Demo
  • 使用Cloudflare的AI Gateway代理Google AI Studio
  • 论文阅读:Code as Policies: Language Model Programs for Embodied Control
  • Redis的单线程和多线程
  • Linux_用 `ps` 按进程名过滤线程,以及用 `pkill` 按进程名安全杀进程
  • 记一次RocketMQ消息堆积
  • (二十二)深入了解AVFoundation-编辑:视频变速功能-实战在Demo中实现视频变速
  • 数字人视频创作革命!开源免费无时限InfiniteTalk ,数字人图片 + 音频一键生成无限长视频
  • ADC-工业信号采集卡-K004规格书
  • 智能电视MaxHub恢复系统
  • 【第十章】Python 文件操作深度解析:从底层逻辑到多场景实战​
  • Flink 滑动窗口实战:从 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程
  • vi/vim 查找字符串
  • h5和微信小程序查看pdf文件
  • 实验1 第一个微信小程序
  • Linux学习-TCP网络协议(补充)
  • 贝叶斯方法和朴素贝叶斯算法
  • tcpdump学习
  • 20250825的学习笔记
  • 2025年09月计算机二级Java选择题每日一练——第七期
  • 配置单区域 OSPF
  • 集群与集群概念
  • 自动修改excel 自动统计文件名称插入 excel辅助工具
  • 升级openssh后ORACLE RAC EM 安装失败处理
  • 【机器学习入门】1.2 初识机器学习:从数据到智能的认知之旅
  • C#_性能优化高级话题
  • MySQL数据备份与恢复全攻略
  • 10-应用调试与性能优化
  • 嵌入式与机器视觉的交叉点:构建智能化设备的实时视频通路