题解 | #牛牛的顺时针遍历#
牛牛的顺时针遍历
https://www.nowcoder.com/practice/4c6722d907b147c7b73b51bdac768374?tpId=363&tqId=10618546&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[] spiralOrder (int[][] matrix) {
List<Integer> result = new ArrayList<>();
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return new int[0]; // 返回一个空数组
}
int m = matrix.length; // 矩阵的行数
int n = matrix[0].length; // 矩阵的列数
int top = 0; // 上边界
int bottom = m - 1; // 下边界
int left = 0; // 左边界
int right = n - 1; // 右边界
while (top <= bottom && left <= right) {
// 遍历上边界从左到右
for (int i = left; i <= right; i++) {
result.add(matrix[top][i]);
}
top++;
// 遍历右边界从上到下
for (int i = top; i <= bottom; i++) {
result.add(matrix[i][right]);
}
right--;
// 在矩阵内部时遍历下边界从右到左
if (top <= bottom) {
for (int i = right; i >= left; i--) {
result.add(matrix[bottom][i]);
}
bottom--;
}
// 在矩阵内部时遍历左边界从下到上
if (left <= right) {
for (int i = bottom; i >= top; i--) {
result.add(matrix[i][left]);
}
left++;
}
}
int[] resArray = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
resArray[i] = result.get(i);
}
return resArray;
}
}
本题知识点分析:
1.数学模拟
2.数组遍历
3.集合转数组
4.集合存取
本题解题思路分析:
1.纯数学模拟
2.按照规则顺时针遍历,先从上边界开始,从左到右,然后从右边界开始,从上到下
3.此时判断左边界有没有超过右边界,判断是否已经遍历完毕
4.判断上边界有没有超过下边界,判断是否遍历完毕
本题使用编程语言: Java
如果你觉得对你有帮助的话,可以点个赞~

查看6道真题和解析
