Java实现LeetCode(54.螺旋矩阵)
作者:莫少侠9527 时间:2023-01-26 20:54:00
LeetCode54. 螺旋矩阵 java实现
题目
难度 中
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
找出每个点的坐标,每个点每次延顺时针分别为右、下、左、上四个方向走一个位置,维护一个方向变量,不同方向时做相应的边界判断。每次遇到边界,必定改变方向,缩短原边界大小。
解法
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> order = new ArrayList<>();
if (matrix.length == 0 || matrix[0].length == 0) {
return order;
}
int m = matrix.length;
int n = matrix[0].length;
int len = m * n;
int row = 0;
int col = 0;
int leftMin = 0;
//每次走上下左右四个方向,一次只走一格
//注意点,因为是从(1,1)开始走的,所以上界最小row是第二行1
int topMin = 1;
//初始方向值
int k = 0;
int[][] dir = {
{1, 0, -1, 0},
{0, 1, 0, -1}
};
for (int i = 0; i < len; i++) {
order.add(matrix[row][col]);
col += dir[0][k % 4];
row += dir[1][k % 4];
switch (k % 4) {
case 0:
//右
if (col > n - 1) {
col = n - 1;
row++;
k++;
n--;
}
break;
case 1:
//下
if (row > m - 1) {
row = m - 1;
col--;
k++;
m--;
}
break;
case 2:
//左
if (col < leftMin) {
col = leftMin;
leftMin++;
row--;
k++;
}
break;
case 3:
//上
if (row < topMin) {
row = topMin;
topMin++;
col++;
k++;
}
break;
}
}
return order;
}
结果
2ms 战胜99.74%
来源:https://blog.csdn.net/qq_29777823/article/details/82357113
标签:Java,LeetCode,螺旋矩阵
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MVC框架自定义实现过程
2021-07-24 03:31:47
![](https://img.aspxhome.com/file/2023/8/93138_0s.png)
C#网络爬虫代码分享 C#简单的爬取工具
2023-10-12 15:03:41
![](https://img.aspxhome.com/file/2023/5/72475_0s.png)
SpringBoot使用邮箱发送验证码实现注册功能
2022-03-30 10:13:36
c#基础知识---委托,匿名函数,lambda
2023-06-12 18:18:07
Java实现五子棋游戏
2022-07-08 12:50:27
java开源区块链jdchain入门
2022-08-07 11:44:44
![](https://img.aspxhome.com/file/2023/3/78003_0s.png)
Android购物车项目快速开发
2021-09-11 01:28:07
C#事件用法实例浅析
2023-02-24 19:22:16
![](https://img.aspxhome.com/file/2023/5/102195_0s.jpg)
Java实现选择排序
2021-06-30 16:53:55
![](https://img.aspxhome.com/file/2023/2/84602_0s.jpg)
Mybatis Plus中的流式查询案例
2023-08-18 16:35:13
详解Android Lint的原理及其使用
2022-12-23 16:05:47
![](https://img.aspxhome.com/file/2023/4/137484_0s.jpg)
Java详细讲解包的作用以及修饰符的介绍
2021-09-14 05:27:26
Spring Cloud负载均衡及远程调用实现详解
2021-10-16 01:11:27
![](https://img.aspxhome.com/file/2023/9/132189_0s.png)
c++指针使用形参改变实参的方法
2023-03-11 22:40:21
C++野指针和悬空指针的实现方法
2022-11-02 08:26:56
C#实现的SQL备份与还原功能示例
2021-09-03 17:53:17
详解Zookeeper基础知识
2023-07-31 08:03:45
![](https://img.aspxhome.com/file/2023/4/119104_0s.jpg)
Java基于servlet监听器实现在线人数监控功能的方法
2021-08-19 11:38:24
Android 实现把bitmap图片的某一部分的颜色改成其他颜色
2022-12-28 00:12:03
![](https://img.aspxhome.com/file/2023/5/139585_0s.jpg)
java日期时间操作工具类
2022-09-03 13:04:58