螺旋矩阵

螺旋矩阵

原题54. 螺旋矩阵 - 力扣(LeetCode) (leetcode-cn.com)

image-20211005184530695

记着很久以前在蓝桥遇到这个题目的时候,是建立一个二维数组来记录搜过的地方,观察什么时候需要”拐弯“。那时不用数组总是报错,现在我把以前的路走一遍,先看代码;

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]);
            }
        }
    }
}

image-20211005185719462

我们一圈一圈的搜索,矩阵垂直方向和竖直方向个数如上图所示都是递减的。

i,j 和 坐标(a,b)都是先变化在计算,所以初始化的时候要指定偏移量。

(a,b)坐标的初始化(0,-1)

int i = matrix[0].length + 1;

int j = matrix.length;

感觉没什么难的,还是以前太菜了。

原文地址:https://www.cnblogs.com/adamr/p/15369398.html