JAVA练习287- 螺旋矩阵

📅 2026/7/15 3:45:18
JAVA练习287- 螺旋矩阵
题目概览给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序返回矩阵中的所有元素。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]]输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出[1,2,3,4,8,12,11,10,9,5,6,7]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100来源54. 螺旋矩阵 - 力扣LeetCode解题分析方法模拟转一圈相当于求小一圈的矩阵因此只需要遍历一圈进行收缩。我们可以定义四个顶点坐标上左顶点(up, left)收缩左边界即 left --上右顶点(up, right)收缩上边界即 up--下右顶点(down, right)收缩右边界即 right--下左顶点(down, left)收缩下边界即 down--。按照该顺序遍历即可。时间复杂度O(mn)空间复杂度O(1) 不使用额外的空间class Solution { public static final int[][] DIRECT new int[][]{{0, 1},{1,0},{0, -1},{-1, 0}}; public ListInteger spiralOrder(int[][] matrix) { ListInteger result new ArrayList(); int dir 0; int m matrix.length, n matrix[0].length; int left -1, right n-1, up 0, down m-1; int i 0, j 0; while(result.size() m * n) { if (i up j right) { dir; left; } else if (i down j right) { dir; up; } else if (i down j left) { dir; right--; } else if (i up j left) { dir 0; down--; } result.add(matrix[i][j]); if (dir 4) { break; } i DIRECT[dir][0]; j DIRECT[dir][1]; } return result; } }