题解 | #牛群螺旋#
牛群螺旋
https://www.nowcoder.com/practice/c42315b4581d449291bdf7e6dbdf8091?tpId=363&tqId=10607055&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj
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
如果您觉得本篇文章有帮助的话,可以点个赞,支持一下,感谢~

