LCR 146. 螺旋遍历二维数组
题目描述
给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。
螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。
示例 1:
输入:array = [[1,2,3],[8,9,4],[7,6,5]]
输出:[1,2,3,4,5,6,7,8,9]
示例 2:
输入:array = [[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
限制:
0 <= array.length <= 100
0 <= array[i].length <= 100
解题思路
1、获取行row、列column数量
2、边界定义
left = 0,top = 0,right = column - 1,bottom = row -1
注意点:从右向左时要判断 left <= right
从下向上时要判断 top <= bottom
代码实现
public class SpiralArray {
public int[] spiralArray(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return new int[0];
}
int row = matrix.length;
int column = matrix[0].length;
int[] result = new int[row*column];
int n = 0;
int top = 0;
int bottom = row -1;
int left = 0;
int right = column -1;
for (int num = 0; num < row * column;) {
for(int i=left;i<=right;i++){
result[num++] = matrix[top][i];
}
top++;
for (int i = top; i <= bottom; i++) {
result[num++] = matrix[i][right];
}
right--;
// 处理只有一行或一列的情况,避免重复添加元素
if (top <= bottom) {
// 从右到左
for (int i = right; i >= left; i--) {
result[num++] = matrix[bottom][i];
}
bottom--;
}
if (left <= right) {
// 从下到上
for (int i = bottom; i >= top; i--) {
result[num++] = matrix[i][left];
}
left++;
}
}
return result;
}
}
LCR 146. 螺旋遍历二维数组解题
603

被折叠的 条评论
为什么被折叠?



