【40.螺旋矩阵】

68 阅读1分钟

题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]

题解

方式一:模拟

public List<Integer> spiralOrder(int[][] matrix) {
    int m = matrix.length;
    int n = matrix[0].length;
    boolean[][] visit = new boolean[m][n];
    List<Integer> result = new ArrayList<>();
    int i = 0;
    int j = 0;
    while(result.size() < m * n) {
        while (j < n && !visit[i][j] && result.size() < m * n) {
            visit[i][j] = true;
            result.add(matrix[i][j++]);
        }
        i++;
        j--;
        while (i < m && !visit[i][j] && result.size() < m * n) {
            visit[i][j] = true;
            result.add(matrix[i++][j]);
        }
        i--;
        j--;
        while (j >= 0 && !visit[i][j] && result.size() < m * n) {
            visit[i][j] = true;
            result.add(matrix[i][j--]);
        }
        i--;
        j++;
        while (i >= 0 && !visit[i][j] && result.size() < m * n) {
            visit[i][j] = true;
            result.add(matrix[i--][j]);
        }
        i++;
        j++;
    }
    return result;
}

总结

算法:模拟