
【java】54. 螺旋矩阵---注意四个边界值即可!!!
初始化四个变量 使用一个循环,逐层遍历矩阵,直到所有元素都被访问。 在每一层循环中,按顺时针的顺序处理四个方向:右边、下面、左边和上面。 处理完每一层后,收缩边界:上界增加1,右界减少1,下界减少1,左界增加1。 重复上述步骤,直到所有元素都被访问。 初始化变量: 循环处理:当 处理右边:从 处理下面:从 处理左边:如果 处理上面:如果 收缩边界:更新 返回结果:当所有元素都被访问后,返回结果列表。
发布日期:2021-05-07 02:22:04
浏览次数:20
分类:精选文章
本文共 1751 字,大约阅读时间需要 5 分钟。
为了按顺时针螺旋顺序遍历矩阵中的所有元素,我们可以使用边界收缩的方法。具体步骤如下:
top
、bottom
、left
和 right
,分别表示当前遍历的矩阵的行的上界、下界、列的左界和右界。以下是实现代码:
import java.util.ArrayList;import java.util.List;public class MatrixSpiralOrder { public static ListspiralOrder(int[][] matrix) { List result = new ArrayList<>(); int top = 0, bottom = matrix.length - 1; int left = 0, right = matrix[0].length - 1; while (top <= bottom && left <= right) { // 处理右边 for (int i = left; i <= right; i++) { result.add(matrix[top][i]); } top++; // 处理下面 for (int i = top; i <= bottom; i++) { result.add(matrix[i][right]); } right--; // 处理左边 if (left <= right) { for (int i = right; i >= left; i--) { result.add(matrix[bottom][i]); } bottom--; } // 处理上面 if (top <= bottom) { for (int i = bottom; i >= top; i--) { result.add(matrix[i][left]); } left++; } } return result; }}
代码解释
top
和 bottom
分别表示矩阵的行的上界和下界,left
和 right
分别表示列的左界和右界。top
小于等于 bottom
且 left
小于等于 right
时,进入循环。left
到 right
,依次添加当前 top
行的元素。top
到 bottom
,依次添加当前 right
列的元素。left
小于等于 right
,则从 right
到 left
,依次添加当前 bottom
行的元素。top
小于等于 bottom
,则从 bottom
到 top
,依次添加当前 left
列的元素。top
、bottom
、left
和 right
,进入下一层循环。这种方法确保了按顺时针螺旋顺序遍历矩阵中的所有元素,并且时间复杂度为 O(m*n),空间复杂度为 O(1)。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月03日 10时04分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
AS与.net的交互——加载web上的xml
2019-03-06
Javascript之旅——第八站:说说instanceof踩了一个坑
2019-03-06
Javascript之旅——第九站:吐槽function
2019-03-06
Javascript之旅——第十一站:原型也不好理解?
2019-03-06
Sql Server之旅——第十站 看看DML操作对索引的影响
2019-03-06
十五天精通WCF——第二天 告别烦恼的config配置
2019-03-06
双十一来了,别让你的mongodb宕机了
2019-03-06
asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
2019-03-06
Tomcat 热部署
2019-03-06
深入解析 HTTP 缓存控制
2019-03-06
深入浅出访问者模式
2019-03-06
深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
2019-03-06
百度前端技术学院task16源代码
2019-03-06
解析js中( ( ) { } ( ) )的含义
2019-03-06
js设计模式总结5
2019-03-06
Python大神编程常用4大工具,你用过几个?
2019-03-06
一文带你了解图神经网络
2019-03-06
9个常用ES6特性归纳(一般用这些就够了)
2019-03-06
3D渲染集群,你了解多少?
2019-03-06
除了方文山,用TA你也能帮周杰伦写歌词了
2019-03-06