写点什么

【LeetCode】螺旋矩阵 Java 题解

用户头像
HQ数字卡
关注
发布于: 2021 年 03 月 15 日

题目


给你一个 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) * https://leetcode-cn.com/problems/spiral-matrix/ * * @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 数组来记录是否访问过矩阵元素。

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

  • 坚持每日一题,加油!


发布于: 2021 年 03 月 15 日阅读数: 7
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】螺旋矩阵Java题解