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

算法练习题17——leetcode54螺旋矩阵

题目描述

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

 代码

import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList<>();// 如果矩阵为空,直接返回空的结果列表if (matrix == null || matrix.length == 0) return result;// 获取矩阵的行数 m 和列数 nint m = matrix.length;      // 行数int n = matrix[0].length;   // 列数// 初始化四个边界,用于控制螺旋遍历的范围int top = 0;                // 上边界int bottom = m - 1;         // 下边界int left = 0;               // 左边界int right = n - 1;          // 右边界// 当上、下、左、右边界没有相互交错时,继续遍历while (top <= bottom && left <= right) {// 1. 从左到右遍历当前的上边界for (int i = left; i <= right; i++) {result.add(matrix[top][i]);  // 添加当前上边界的元素}top++;  // 上边界向下收缩一行,表示这一行已经处理完// 2. 从上到下遍历当前的右边界for (int i = top; i <= bottom; i++) {result.add(matrix[i][right]);  // 添加当前右边界的元素}right--;  // 右边界向左收缩一列,表示这一列已经处理完// 3. 从右到左遍历当前的下边界(仅当 top <= bottom 时)//    这里很重要!因为我们已经处理了上边界并将其收缩,//    所以在遍历下边界之前,需要确认是否还有剩余的行待遍历。if (top <= bottom) {for (int i = right; i >= left; i--) {result.add(matrix[bottom][i]);  // 添加当前下边界的元素}bottom--;  // 下边界向上收缩一行,表示这一行已经处理完}// 4. 从下到上遍历当前的左边界(仅当 left <= right 时)//    这里同样很重要!因为我们已经处理了右边界并将其收缩,//    所以在遍历左边界之前,需要确认是否还有剩余的列待遍历。if (left <= right) {for (int i = bottom; i >= top; i--) {result.add(matrix[i][left]);  // 添加当前左边界的元素}left++;  // 左边界向右收缩一列,表示这一列已经处理完}}// 返回螺旋顺序遍历的结果列表return result;}
}

相关文章:

  • Go语言设计与实现 学习笔记 第六章 并发编程(3)
  • python基础语法十一-赋值、浅拷贝、深拷贝
  • 零知识证明在BSV网络上的应用
  • YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)
  • Flask中实现WebSocket需要什么组件
  • 如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐
  • 面对Redis数据量庞大时的应对策略
  • 【Linux 内核构建】如何查看 Linux 系统中可以选择的内核有哪一些?如何切换 Linux kernel 版本?
  • docker 安装 rabbitmq
  • Java内存马系列 | SpringMVC内存马 - 下 | SpringMVC 内存马分析
  • 人工智能在行动:利用人工智能扩展您的显示和视频工作
  • AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理
  • QT6聊天室项目 网络通信实现逻辑分析
  • 优化算法与正则化
  • Tomcat服务详解
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 30秒的PHP代码片段(1)数组 - Array
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • k个最大的数及变种小结
  • overflow: hidden IE7无效
  • pdf文件如何在线转换为jpg图片
  • vue-cli在webpack的配置文件探究
  • 动态魔术使用DBMS_SQL
  • 官方解决所有 npm 全局安装权限问题
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 终端用户监控:真实用户监控还是模拟监控?
  • Python 之网络式编程
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 大数据全解:定义、价值及挑战
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • "无招胜有招"nbsp;史上最全的互…
  • #QT项目实战(天气预报)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (007)XHTML文档之标题——h1~h6
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Java入门)学生管理系统
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (三)elasticsearch 源码之启动流程分析
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)appium-desktop定位元素原理
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)linux 命令大全
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (自用)仿写程序
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)