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

[Java恶补day20] 54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 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


知识点:
数组、矩阵、标记


解:
术语定义:1个轮回=执行1次上、右、下、左
核心思路:用四个变量top、right、bottom、left,表示当前遍历的顶行、右列、底行、左列在一个while循环内(可能需要多个轮回),通过四个并列for循环,分别执行顶行、右列、底行、左列的遍历在每个遍历的for循环后,需要更新变量(遍历顶行后,需要更新top,这样下一次就是遍历下面一行的元素。以此类推),并判断若top>bottom、right<left、bottom<top、left>right,表示当前已遍历完毕,需要退出while循环

测试用例1分析(遍历方向中,逗号左边表示当前遍历的行/列。逗号右边表示当前的遍历方向):
请添加图片描述

测试用例2分析(遍历方向中,逗号左边表示当前遍历的行/列。逗号右边表示当前的遍历方向):
请添加图片描述

时间复杂度: O ( m n ) O(mn) O(mn)。遍历所有元素。
空间复杂度: O ( 1 ) O(1) O(1)。未使用辅助数组,仅使用辅助变量。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {//获取矩阵的行数、列数int m = matrix.length;int n = matrix[0].length;//定义结果列表List<Integer> res = new ArrayList<>();//特殊情况判断if (matrix == null || m == 0) {return res;}//定义当前遍历的行的左端点、右端点 / 列的上端点、下端点int top = 0;int bottom = m - 1;int left = 0;int right = n - 1;while (true) {//动作1:从左到右遍历顶行for (int i = left; i <= right; i++) {res.add(matrix[top][i]);}top++;//更新,下一个轮回将执行下边一行if (top > bottom) {//退出循环,此时已完成操作break;}//动作2:从上到下遍历右列for (int i = top; i <= bottom; i++) {res.add(matrix[i][right]);}right--;//更新,下一个轮回将执行左边一列if (right < left) {//退出循环,此时已完成操作break;}//动作3:从右到左遍历底行for (int i = right; i >= left; i--) {res.add(matrix[bottom][i]);}bottom--;//更新,下一个轮回将执行上边一行if (bottom < top) {//退出循环,此时已完成操作break;}//动作4:从下到上遍历左列for (int i = bottom; i >= top; i--) {res.add(matrix[i][left]);}left++;//更新,下一个轮回将执行右边一列if (left > right) {//退出循环,此时已完成操作break;}}return res;}
}

参考:
1、题解

相关文章:

  • RK3568/RK3588 KVM系统虚拟化解决方案
  • 吉客云ERP集成金蝶ERP(云星空、云星辰、云星瀚、KIS、K3、EAS)
  • 全面解析数据库:从基础概念到前沿应用​
  • 条件语句 if语句 + if...else+switch语句+三元运算符
  • 构建欺诈事件的结构化威胁建模框架
  • Invalid context structure解决Dify框架中图像推理错误:一步步排查与修复指南
  • 软件开发工程师如何在项目开发中了解学习 ISO 13485(2)
  • 编程工具点亮效率之光
  • 中小企业碳账本管理指南
  • 瞬移--BFS+set去重
  • 【DVWA系列】——xss(Reflected)——Medium详细教程
  • sql server连接遇到的问题
  • Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
  • 《Minio 分片上传实现(基于Spring Boot)》
  • LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
  • 第一章 空间解析几何与向量代数 ~ 空间直角坐标系
  • 人工智能100问☞第43问:什么是提示工程(Prompt Engineering)?
  • Python 训练 day46
  • LeetCode - 3. 无重复字符的最长子串
  • 项目管理进阶:解析112页IPD集成产品开发高层培训【附全文阅读】
  • 深圳做网站外包公司/合肥网
  • 平面设计素材包/四川seo排名
  • 北京建设工程招标信息网/北京优化互联网公司
  • 带会员功能的网站/建站服务
  • 找人做的网站推广被坑/搜索引擎营销的作用
  • 网站优化排名易下拉排名/网站排名大全