
spiralOrder-螺旋矩阵
初始化变量记录当前遍历的行和列范围。 在每层循环中,按顺序处理四个方向的元素。 调整行和列的范围,逐渐向内遍历。 重复上述过程直到整个矩阵被遍历完毕。
发布日期:2021-05-18 07:53:20
浏览次数:14
分类:精选文章
本文共 1592 字,大约阅读时间需要 5 分钟。
按照顺时针螺旋顺序遍历矩阵中的所有元素,可以使用层序遍历的方法,每层依次处理右、下、左、上四个方向。具体实现如下:
以下是具体的代码实现:
import java.util.ArrayList;import java.util.List;public class Solution { public ListspiralOrder(int[][] matrix) { int m = matrix.length; if (m == 0) return new ArrayList<>(); int n = matrix[0].length; List result = new ArrayList<>(); int h = 0, l = 0; while (h < m && l < n) { // 向右 for (int i = l; i < n; i++) { result.add(matrix[h][i]); } h++; if (h >= m) break; // 向下 for (int i = h; i < m; i++) { result.add(matrix[i][n-1]); } l++; if (l >= n) break; // 向左 if (h < m) { for (int i = n-1; i >= l; i--) { result.add(matrix[m-1][i]); } m--; } // 向上 if (l < n) { for (int i = m-1; i >= h; i--) { result.add(matrix[i][l-1]); } n--; } } return result; }}
代码解释
- 初始化变量:
h
和l
分别表示当前遍历的行和列的起始位置,m
和n
分别表示矩阵的行数和列数。 - 循环处理每一层:在每一层循环中,依次处理矩阵的右、下、左、上四个方向。
- 向右遍历:从当前行的起始列
l
遍历到列的末尾n-1
,然后行索引h
加1。 - 向下遍历:从当前行的
h+1
遍历到行的末尾m-1
,然后列索引l
加1。 - 向左遍历:如果还有行剩余,向左从列的末尾
n-1
遍历到当前列起始点l
,然后行数m
减1。 - 向上遍历:如果还有列剩余,向上从行的末尾
m-1
遍历到当前行起始点h
,然后列数n
减1。
- 向右遍历:从当前行的起始列
- 终止条件:当行或列索引超出矩阵范围时,退出循环,确保不重复遍历。
这种方法确保了每个元素按照顺时针螺旋顺序被遍历且只遍历一次,时间复杂度为O(m*n),空间复杂度为O(1)。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年05月09日 04时25分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
vue(渐进式前端框架)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
数据结构——链表(3)
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12