【LeeCode】54.螺旋矩阵

给定一个二维数组 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]

解【一开始做的时候arr用的是一维数组一直不过,改成返回值是List就好了】:

class Solution {
    public List spiralOrder(int[][] matrix) {
​
        int topRow = 0, bottomRow = matrix.length - 1; // 定义上边界和下边界
        int leftCol = 0, rightCol = matrix[0].length - 1; // 定义左边界和右边界
        int direction = 0; // 初始方向,0代表向右
​
        List arr = new ArrayList<>();
        
        while (topRow <= bottomRow && leftCol <= rightCol) {
            if (direction == 0) { // 向右
                for (int i = leftCol; i <= rightCol; i++) {
                    arr.add(matrix[topRow][i]);
                }
                topRow++; // 上边界下移
            } else if (direction == 1) { // 向下
                for (int i = topRow; i <= bottomRow; i++) {
                    arr.add(matrix[i][rightCol]);
                }
                rightCol--; // 右边界左移
            } else if (direction == 2) { // 向左
                for (int i = rightCol; i >= leftCol; i--) {
                    arr.add(matrix[bottomRow][i]);
                }
                bottomRow--; // 下边界上移
            } else if (direction == 3) { // 向上
                for (int i = bottomRow; i >= topRow; i--) {
                    arr.add(matrix[i][leftCol]);
                }
                leftCol++; // 左边界右移
            }
            direction = (direction + 1) % 4; // 切换方向
        }
        return arr;
    }
}

你可能感兴趣的:(#,LeeCode,矩阵,线性代数)