54. 螺旋矩阵

小豆丁 1年前 ⋅ 841 阅读
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

解析

我们只需要记住固定的写法就好了,按照 右->下->左->上 的顺序去访问

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int[][] direction = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
        List<Integer> res = new ArrayList<>();
        if(matrix==null||matrix.length==0||matrix[0].length==0) return res;
        int m = matrix.length,n = matrix[0].length,x= 0,y = -1,index = 0;
        int[][] flag = new int[m][n];
        while(res.size()<m*n){
            while(true){
                x+=direction[index][0];
                y+=direction[index][1];
                res.add(matrix[x][y]);
                flag[x][y] = 1;
                int tx = x+direction[index][0];
                int ty = y+direction[index][1];
                if(tx<0||ty<0||tx==m||ty==n||flag[tx][ty]==1) break;
            }
            index = (index+1)%4;
        }
        return res;
    }
}