龙空技术网

「LeetCode」螺旋矩阵Java题解

Prada 66

前言:

此刻兄弟们对“编程螺旋矩阵”大约比较重视,你们都想要分析一些“编程螺旋矩阵”的相关知识。那么小编也在网摘上收集了一些关于“编程螺旋矩阵””的相关知识,希望咱们能喜欢,咱们快快来了解一下吧!

# 题目

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

# 代码

public class DayCode {    public static void main(String[] args) {        int[][] matrix = new int[][]{{1, 2}, {3, 4}};        List<Integer> ans = new DayCode().spiralOrder(matrix);        System.out.println(ans.toString());    }    /**     * 时间复杂度O(rows * cols)     * 空间复杂度O(rows * cols)     *      *     * @param matrix     * @return     */    public List<Integer> spiralOrder(int[][] matrix) {        List<Integer> ans = new ArrayList<>();        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {            return ans;        }        int rows = matrix.length;        int cols = matrix[0].length;        int total = rows * cols;        boolean[][] visited = new boolean[rows][cols];        int row = 0;        int col = 0;        int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};        int directionIdx = 0;        for (int i = 0; i < total; i++) {            ans.add(matrix[row][col]);            visited[row][col] = true;            int nextRow = row + directions[directionIdx][0];            int nextCol = col + directions[directionIdx][1];            if (nextRow < 0 || nextRow >= rows || nextCol < 0 || nextCol >= cols || visited[nextRow][nextCol]) {                directionIdx = (directionIdx + 1) % 4;            }            row += directions[directionIdx][0];            col += directions[directionIdx][1];        }        return ans;    }}

# 总结

* 这个题目题意简单易懂,代码实现的时候,采用visited数组来记录是否访问过矩阵元素。

* 代码中的小亮点是采用方向向量来记录移动的方向,理解这里即可帮助我们解决问题。

* 坚持每日一题,加油!

标签: #编程螺旋矩阵 #螺旋矩阵js