Java实现LeetCode(54.螺旋矩阵)
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 ListspiralOrder(int[][] matrix) {ArrayList 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是第二行1int 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%
【Java实现LeetCode(54.螺旋矩阵)】到此这篇关于Java实现LeetCode(螺旋矩阵)的文章就介绍到这了,更多相关Java实现螺旋矩阵内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 事件代理
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- Node.js中readline模块实现终端输入
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum