import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型二维数组 * @return int整型一维数组 */ public int[] spiral_order (int[][] matrix) { // 首先判断矩阵是否为空,如果为空则直接返回空数组 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return new int[0]; } int m = matrix.length; int n = matrix[0].length; int[] result = new int[m * n]; int count = 0; // 用于记录结果数组的索引 int rowBegin = 0; // 当前螺旋的起始行索引 int rowEnd = m - 1; // 当前螺旋的终止行索引 int colBegin = 0; // 当前螺旋的起始列索引 int colEnd = n - 1; // 当前螺旋的终止列索引 while (rowBegin <= rowEnd && colBegin <= colEnd) { // 从左到右遍历当前螺旋的上边界 for (int j = colBegin; j <= colEnd; j++) { result[count++] = matrix[rowBegin][j]; } rowBegin++; // 上边界向下收缩 // 从上到下遍历当前螺旋的右边界 for (int i = rowBegin; i <= rowEnd; i++) { result[count++] = matrix[i][colEnd]; } colEnd--; // 右边界向左收缩 // 判断是否还有剩余行和列 if (rowBegin <= rowEnd) { // 从右到左遍历当前螺旋的下边界 for (int j = colEnd; j >= colBegin; j--) { result[count++] = matrix[rowEnd][j]; } } rowEnd--; // 下边界向上收缩 // 判断是否还有剩余列 if (colBegin <= colEnd) { // 从下到上遍历当前螺旋的左边界 for (int i = rowEnd; i >= rowBegin; i--) { result[count++] = matrix[i][colBegin]; } } colBegin++; // 左边界向右收缩 } return result; } }
本题知识点分析:
1.数学模拟
2.矩阵
3.数组遍历
本题解题思路分析:
1.从左到右遍历当前螺旋的上边界,上边界向下收缩
2.从上到下遍历当前螺旋的右边界,右边界向左收缩
3.判断是否还有剩余行和列,从右到左遍历当前螺旋的下边界,下边界向上收缩
4.判断是否还有剩余列,从下到上遍历当前螺旋的左边界,左边界向右收缩
5.最后返回顺时针得到的result数组即可
本题使用编程语言: Java
如果您觉得本篇文章有帮助的话,可以点个赞,支持一下,感谢~