螺旋矩阵
原题54. 螺旋矩阵 - 力扣(LeetCode) (leetcode-cn.com)
记着很久以前在蓝桥遇到这个题目的时候,是建立一个二维数组来记录搜过的地方,观察什么时候需要”拐弯“。那时不用数组总是报错,现在我把以前的路走一遍,先看代码;
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int i = matrix[0].length + 1;
int j = matrix.length;
int a = 0;
int b = -1;
List<Integer> list = new ArrayList<>();
while(true){
i -- ;
if(i == 0) return list;
for(int x = 0;x<i;x++){
list.add(matrix[a][++b]);
}
j -- ;
if(j == 0) return list;
for(int x = 0;x<j;x++){
list.add(matrix[++a][b]);
}
i -- ;
if(i == 0) return list;
for(int x = 0;x<i;x++){
list.add(matrix[a][--b]);
}
j -- ;
if(j == 0) return list;
for(int x = 0;x<j;x++){
list.add(matrix[--a][b]);
}
}
}
}
我们一圈一圈的搜索,矩阵垂直方向和竖直方向个数如上图所示都是递减的。
i,j 和 坐标(a,b)都是先变化在计算,所以初始化的时候要指定偏移量。
(a,b)坐标的初始化(0,-1)
int i = matrix[0].length + 1;
int j = matrix.length;
感觉没什么难的,还是以前太菜了。