这道题是螺旋矩阵2的变式,但是它这次给的不是正方形了,所以有一个被我忽视的问题:
就是长方形最后遍历结束如果上下边界重合时,左右边界有可能未重合,
所以有可能遍历过的元素又跑回去,例如下图的7 之后又会跑到6的位置,导致我们的循环数组越界
但正方形就没有这个担忧:下图是正方形会出现的两种情况
还有几个容易忽视的小问题:就是这题与螺旋矩阵2不同的地方在于:
问题一:要生成一个数组,数组有一个问题,就是最后一个数的角标是数组长度减一
问题二:就是我们怎样看待数组的行和列
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int m = matrix.length;
int n = matrix[0].length;
int sum = m*n;
int l = 0, r = n - 1, u = 0, d = m - 1;
int nums = 0;
int[] arr = new int[sum];
while(nums<sum){
for(int i = l;i<=r;i++){
arr[nums++] = matrix[u][i];
System.out.println(matrix[u][i]);
}
u++;
for(int i = u;i<=d;i++){
arr[nums++] = matrix[i][r];
System.out.println(matrix[i][r]);
}
r--;
for(int i = r;i>= l&& nums < sum;i--){
arr[nums++] = matrix[d][i];
}
d--;
for(int i = d;i>=u && nums < sum;i--){
arr[nums++] = matrix[i][l];
}
l++;
}
for (int i = 0; i < sum; i++) {
result.add(arr[i]);
}
return result;
}
}