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

54.螺旋矩阵(中等)

给你一个mn列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

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

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100
class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: left,right,top,below=0,len(matrix[0])-1,0,len(matrix)-1 res=[] while True: for i in range(left,right+1): res.append(matrix[top][i]) top+=1 if top>below: break for i in range(top,below+1): res.append(matrix[i][right]) right-=1 if left>right: break for i in range(right,left-1,-1): res.append(matrix[below][i]) below-=1 if top>below: break for i in range(below,top-1,-1): res.append(matrix[i][left]) left+=1 if left>right: break return res

主要思想是设立上下左右四个边界,根据边界打印,打印完之后边界向内收缩1,表示已打印,如果边界相遇说明打印已完成。

首先在第一行开始从左到右打印,打印完第一行之后,上边界下移,也就是top加一,然后从上边界开始从上到下打印,打印完后右边界左移,然后从右边界从右到左打印,下边界上移,然后从下边界从下到上打印,一直如此循环。

打印行的时候只需要看上边界是否大于下边界,如果大于就退出,表示打印完了;同样打印列的时候看左边界是否大于右边界,大于就退出。

模拟过程:

假设矩阵是3行3列

matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

初始:l=0, r=2, t=0, b=2

第一轮循环:

  1. 从左到右:res.append(matrix[0][0..2])[1,2,3]

  2. t += 1t=1

  3. 从上到下:res.append(matrix[1..2][2])[1,2,3,6,9]

  4. r -= 1r=1

  5. 从右到左:res.append(matrix[2][1..0])[1,2,3,6,9,8,7]

  6. b -= 1b=1

  7. 从下到上:res.append(matrix[1..0][0])[1,2,3,6,9,8,7,4]

  8. l += 1l=1

此时边界:l=1, r=1, t=1, b=1

第二轮循环开始:

  1. 从左到右:res.append(matrix[1][1..1])[1,2,3,6,9,8,7,4,5]

  2. t += 1t=2

  3. 检查if t > b: break

    • 现在t=2,b=1

    • 2 > 1成立 ✅

    • break 退出循环

http://www.jsqmd.com/news/502596/

相关文章:

  • Nanbeige 4.1-3B清爽WebUI教程:对话历史本地持久化存储实现方案
  • Qwen-Rapid-AIO:8秒完成专业级AI图像编辑的终极指南
  • 计算机毕业设计java基于微信小程序的房屋租赁系统 基于微信小程序的租房信息服务平台设计与实现 基于微信小程序的房屋租赁与管家服务管理系统
  • 手把手玩转P2混动Simulink建模 | 老司机带你看懂逻辑门限控制
  • 开源手写字体悠哉:设计师必备的零成本商用解决方案
  • DTD 属性详解
  • CompreFace人脸识别技术选型指南:从模型对比到落地实践
  • Agent Supervisor监督并PUA其他agent执行任务的skill
  • 2026 Claude账号被封?底层原因详解与Claude稳定防封指南
  • Taro 4.0支付宝小程序构建故障排除:4个专业级解决方案助开发者提升构建成功率
  • 3步解锁Mac鼠标终极潜力:从零配置到专业级自定义的完整指南
  • 基于STM32的分布式电缆温度监测设计(开题报告)
  • 【LeetCode 30.串联所有单词的子串】滑动窗口+哈希表 最优解|超详细题解
  • 若依系统4.6.0版本代码审计实战:从部署到漏洞复现的全流程指南
  • 【开题答辩全过程】以 基于SpringBoot的河传宿舍分配系统为例,包含答辩的问题和答案
  • 学校AI率要求越来越严:2026年各高校AIGC检测政策趋势深度分析
  • day7-接雨水-困难
  • DPC算法实战:用MATLAB搞定密度峰值聚类(附完整代码)
  • 突破MATLAB优化建模瓶颈:YALMIP高效实战指南
  • 保姆级教程:从零开始安装Python和PyCharm,搭建你的Python开发环境
  • OpenClaw任务编排:ollama-QwQ-32B多步骤自动化流程设计
  • API认证架构师指南:从漏洞分析到性能优化的全景决策模型
  • ZLibrary反爬机制实战分析的技术文章大纲
  • Notepad--:跨平台文本编辑新范式,立即开启高效创作之旅
  • Blender动画GIF制作全攻略:Bligify插件从入门到精通
  • Python入门必看:3种运行Python程序的方式,从零到上手
  • 从Pikachu靶场看SQL注入防御:那些年被我们忽略的GBK编码漏洞
  • 重新定义开源工具评测:fanqienovel-downloader如何重塑小说下载体验
  • 【硬核干货】Python基础入门全攻略:从零到一,彻底搞懂核心概念!
  • 【Linux】linux进程概念(fork,进程状态,僵尸进程,孤儿进程)