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

Leetcode hot100 螺旋矩阵【中等】

和旋转矩阵一样,这个题同样是模拟实现题,就是你脑子里咋想的,用代码还原出来就行。

连直觉都不用靠,过程就是图中画的那样,螺旋着走。

先给代码看看大致吧:

class Solution { public List<Integer> spiralOrder(int[][] matrix) { int size=matrix.length*matrix[0].length; List<Integer> list = new ArrayList<Integer>(); //初始化 int top=1; int bottom=matrix.length-1; int left=0; int right=matrix[0].length-1; //初始化 int x=0; int y=-1; //因为下面的循环里y要先++,所以y从-1开始 int count=0; while(true){ //先走,再判断 y++; //往右 while(y<=right) { list.add(matrix[x][y]);count++; y++; } if(count==size) break; y--;//走出去了一步,处理一下 right--;//右边界收缩 PS:不用怕边界收缩成负数, 负数了也无所谓,有count控制在合适的时机就退出了 x++;//先走一步 //往下 while(x<=bottom){list.add(matrix[x][y]);count++; x++;} if(count==size) break; x--;//走出去了一步,处理一下 bottom--;//下边界收缩 y--; //往左 while(y>=left){list.add(matrix[x][y]);count++;y--;} if(count==size) break; y++;//走出去了一步,处理一下 left++; //左边界收缩 x--; //往上走 while(x>=top){list.add(matrix[x][y]);count++;x--;} if(count==size) break; x++; ////走出去了一步,处理一下 top++; //上边界收缩 } return list; } }

其实就是脑海里演练整个过程,一开始先往右走。往右走就是x不变y一直加加,加到啥时候停下呢?到达右边界的时候,然后往下走,往下走就是y不变x一直加加,加到啥时候停下呢?到达下边界的时候,然后往左走,往左走就是x不变y一直减减,啥时候停下呢?到达左边界的时候。然后往上走,往上走就是y不变x一直减减,啥时候停下呢?到达上边界的时候。然后又开始往右走,这是一个循环。

这么一通分析,你就明白了,难点主要是两点:

难点1:一是4个边界的维护

难点2:二是退出循环的条件

难点1:边界处理最难受了。首先,四个边界是取不溢出的最大下标,还是取刚好溢出的下标呢?比如说我一行有4个数,右边界是y=3还是y=4呢?取前者的话用<=去判断边界,取后者的话用<去判断,直觉<=更方便,所以这里用不溢出的最大下标。再其次还要考虑,4个角上的值属于前一趟走的还是下一趟,我让他属于上一趟,直觉属于上一趟更方便

难点2:退出循环的条件。与其乱七八糟的弄边界的判断(比如,right或者left到达边界并且top==left的时候 OR top或者bottom到达边界,我不确定对不对哈),不如直接弄个count计数,天才!



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

相关文章:

  • 别再只重装Ensp了!WinPcap、Wireshark、VirtualBox版本兼容性才是AR1报错40/41的元凶
  • AI视频剪辑:自然语言指令与风格迁移实战
  • YOLO11性能暴增:主干网络升级 | 替换为RepGhostNet,结合重参数化与Ghost模块,打造极致轻量的YOLO11
  • 3步快速上手:用vectorizer将位图智能转换为可无限缩放的矢量图
  • 爱芯元智以独立算力底座,搅动智驾芯片生态
  • 香港理工大学项目交付,打造高扩展科研无人机平台
  • 【机械臂】基于RRT算法实现puma560机械臂路径规划附matlab代码
  • LLaMA Pro渐进式块扩展:避免灾难性遗忘的模型进化方法
  • 猫抓浏览器扩展:重新定义网页媒体资源获取的智能解决方案
  • 从压缩机到AI芯片,追觅空调系统性技术背后的人与空气新关系
  • **一笔“工程化印钞”:Polymarket上164K美元单笔大胜的背后,是MiroFish仿真引擎的胜利,还是量化FOMO的镜像?**
  • 如何解决Mac鼠标滚动冲突?Mos工具完整指南帮你轻松搞定
  • 终极指南:5步轻松为Unity游戏添加实时翻译功能
  • 20260501生活反思——把她当做煮饭阿姨即可
  • 3dsMax安装后必做的10项设置:从界面优化到渲染器配置,让你的工作效率翻倍
  • MCP服务器开发流程
  • 室外无界・感知无形:无感定位 × 数字孪生,开启空间智能新十年
  • 5分钟掌握PowerToys中文版:让Windows效率提升3倍的实战指南
  • 在 Rails 中指定端口和 IP 地址
  • 使用Taotoken后如何清晰观测各模型API调用用量与成本分布
  • 别再只调Resize和ToTensor了!PyTorch transforms里这5个隐藏功能,让你的模型效果立竿见影
  • 避坑指南:ROS2 RealSense rs_launch.py参数配置中的5个常见误区与性能调优
  • 红安白转黑养发馆首选哪家?黑奥秘AI智能检测,白转黑过程效果可视化 - 美业信息观察
  • 2026 年 5 月 1 日与栾老师的谈话
  • 如何让A站视频永远留在你的硬盘里:AcFunDown深度使用指南
  • **从蠕虫到数字人类:MIT博士生退学背后的算力与数据博弈**
  • ReadCat:免费开源小说阅读器终极指南,打造你的专属数字书房
  • Nintendo Switch大气层系统:从新手到专家的完整指南
  • 企业如何利用Taotoken统一管理多个团队的AI模型用量与成本
  • DataGrip连接MySQL 8.0踩坑实录:从驱动报错到连接成功的完整避坑指南