前言:
此刻兄弟们对“编程螺旋矩阵”大约比较重视,你们都想要分析一些“编程螺旋矩阵”的相关知识。那么小编也在网摘上收集了一些关于“编程螺旋矩阵””的相关知识,希望咱们能喜欢,咱们快快来了解一下吧!# 题目
给你一个 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数组来记录是否访问过矩阵元素。
* 代码中的小亮点是采用方向向量来记录移动的方向,理解这里即可帮助我们解决问题。
* 坚持每日一题,加油!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。