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

【力扣-54. 螺旋矩阵 ✨】Python笔记

问题分析

给定一个 m x n 的矩阵,要求按照顺时针螺旋顺序返回矩阵中的所有元素。矩阵可能为空或为单行/单列,需要按“右→下→左→上”的顺序循环遍历,直到所有元素被访问。

关键思路

采用边界指针法动态控制遍历范围,通过维护四个边界指针(top、bottom、left、right)来界定当前待遍历的环形区域。每完成一圈遍历后收缩边界,直到所有元素被访问。

解决步骤

初始化四个边界指针:

  • top = 0, bottom = m - 1
  • left = 0, right = n - 1

按顺时针方向分四步遍历:

  1. 从左到右遍历顶行,完成后top指针下移
  2. 从上到下遍历右列,完成后right指针左移
  3. 从右到左遍历底行(需检查top <= bottom),完成后bottom指针上移
  4. 从下到上遍历左列(需检查left <= right),完成后left指针右移

终止条件为top > bottom或left > right。

代码实现

from typing import List class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix or not matrix[0]: return [] m, n = len(matrix), len(matrix[0]) result = [] top, bottom = 0, m - 1 left, right = 0, n - 1 while top <= bottom and left <= right: for col in range(left, right + 1): result.append(matrix[top][col]) top += 1 for row in range(top, bottom + 1): result.append(matrix[row][right]) right -= 1 if top <= bottom: for col in range(right, left - 1, -1): result.append(matrix[bottom][col]) bottom -= 1 if left <= right: for row in range(bottom, top - 1, -1): result.append(matrix[row][left]) left += 1 return result

复杂度分析

时间复杂度:O(MN),需要遍历矩阵中的每个元素一次。 空间复杂度:O(1)(不计输出数组),仅使用常数个变量。

注意事项

  1. 第三步和第四步需检查是否存在有效行/列,避免重复添加或越界。
  2. 边界更新顺序要正确,防止遗漏角落元素。
  3. 空矩阵情况需特殊处理。
http://www.jsqmd.com/news/530027/

相关文章:

  • SG90舵机常见问题排查指南:从供电不稳到PWM信号异常的解决方案
  • 国内科技领先的企业有哪些 - 资讯焦点
  • CyaSSL嵌入式TLS实战:轻量级SSL库在STM32上的集成与优化
  • 张祥前统一场论引力场公式推导第一宇宙速度
  • Python-for-Android实战优化:从崩溃修复到性能飞升的避坑指南
  • 航空电子AFDX总线测试全攻略:从硬件选型到故障注入实战(附ARINC664配置模板)
  • 中国智能制造科技企业有哪些 - 资讯焦点
  • Python开发者必看:Claude Agent SDK实战指南(附完整配置流程)
  • 天津诺兰德中医馆:让智慧中医惠及津门千万家
  • 完全二叉树的权值
  • 终极指南:3分钟快速获取阿里云盘Refresh Token的完整教程
  • Pixel Mind Decoder 在软件测试中的应用:自动化生成用户情绪化测试用例
  • 免费ssl证书申请acme.sh
  • 空洞骑士模组管理终极方案:Scarab一键安装与智能依赖管理指南
  • Unity AssetBundle优化技巧:如何高效打包和加载资源(附完整代码示例)
  • 收藏!小白程序员必看:Ai Agent 核心设计与面试干货全解析
  • YOLOv5n训练报错:RuntimeError张量尺寸不匹配的3种修复方案(附调试代码)
  • 别再傻傻分不清!一文搞懂RGB相机、深度相机和激光雷达(LiDAR)到底有啥区别
  • ZynqMP裸机开发避坑指南:从内存分配到多核启动(基于Vitis开发环境)
  • 如何在Android应用中实现智能多选下拉框:MultiSelectSpinner完整指南
  • LeetDown:macOS上的iPhone降级工具,让老设备焕发新生
  • MarkdownPad2从安装到精通:常见问题一站式解决指南
  • LumiPixel Canvas Quest跨文化人像生成:展现全球多样性之美
  • java毕业设计基于springboot飞天外卖配送系统
  • 光伏MPPT控制灰狼优化算法:局部遮阴下阴影变化的处理
  • 深度学习:从 Adagrad、RMSProp 到 Adam 的演进
  • 颠覆设计开发流程:FigmaToCode如何实现从像素到代码的智能跃迁
  • 80. 使用 grafana 和 prometheus监控Longhorn
  • OpenClaw智能书签:Qwen3-VL:30B自动归档失效链接并推荐替代
  • java毕业设计基于springboot动物之家平台