算法:螺旋矩阵 I
2018-01-13 00:52
211 查看
问题
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例
给定如下矩阵:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
应返回 [1,2,3,6,9,8,7,4,5]。
思路
思路比较普通,就是螺旋遍历。
实现
private static List<Integer> spiralOrder(int[][] matrix) { // write your code here if (matrix.length == 0 || matrix[0].length == 0) { return null; } // 遍历当前行的首位置 int lineStart = 0; // 遍历当前行的末位置 int lineEnd = matrix[0].length; // 遍历当前列的首位置 int columnStart = 0; // 遍历当前列的末位置 int columnEnd = matrix.length; // 创建结果队列 List<Integer> list = new LinkedList<>(); // 遍历 int flag = 0; while (list.size() < matrix.length * matrix[0].length) { if (flag == 0) { for (int i = lineStart; i < lineEnd; i++) { list.add(matrix[columnStart][i]); } flag++; columnStart++; } else if (flag == 1) { for (int i = columnStart; i < columnEnd; i++) { list.add(matrix[i][lineEnd - 1]); } lineEnd--; flag++; } else if (flag == 2) { for (int i = lineEnd; i > lineStart; i--) { list.add(matrix[columnEnd - 1][i - 1]); } flag++; columnEnd--; } else if (flag == 3) { for (int i = columnEnd; i > columnStart; i--) { list.add(matrix[i - 1][lineStart]); } flag -= 3; lineStart++; } } return list; }
如果文章对你有帮助的话,不要忘记打上小编哟~
相关文章推荐
- C/C++面试之算法系列--打印 N*N 螺旋矩阵
- java常用算法之螺旋矩阵
- [算法]方正面试题:N×N矩阵螺旋打印输出
- 螺旋矩阵----在博客园上看见别人的算法没有看明白自己搞了一个。
- 螺旋矩阵、螺旋队列算法
- 自己用python写的螺旋矩阵生成算法
- 螺旋矩阵(算法)
- 螺旋数组算法[上篇]--直接模拟算法
- 关于 Commons-math 中的矩阵算法小结
- 螺旋数组算法[下篇]--努力接近需求的本质
- BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法
- 对称矩阵与压缩存储算法(java实现)
- 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)
- 输出螺旋矩阵(二)
- 算法笔记_167:算法提高 矩阵翻转(Java)
- 常见面试算法之旋转打印矩阵
- 【算法】矩阵相乘
- 【数据结构+算法】【模拟法】--- 螺旋矩阵填数
- 矩阵快速幂--最基础的算法,最详细的注释
- 备考蓝桥杯(13)顺时针螺旋填入矩阵 java实现