目录
- 力扣经典150题第三十五题:螺旋矩阵
- 引言
- 题目详解
- 解题思路
- 代码实现
- 示例演示
- 复杂度分析
- 总结
- 扩展阅读
力扣经典150题第三十五题:螺旋矩阵
引言
本篇博客介绍了力扣经典150题中的第三十五题:螺旋矩阵。题目要求按照顺时针螺旋顺序遍历给定的二维矩阵,并返回所有元素的顺序列表。
题目详解
给定一个 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]
解题思路
为了按照顺时针螺旋顺序遍历矩阵,我们可以模拟“层级遍历”的方式。具体步骤如下:
- 定义四个边界:上边界
top
、下边界bottom
、左边界left
、右边界right
,初始值分别为 0、m-1、0、n-1。 - 根据当前边界依次向右、向下、向左、向上遍历矩阵,并将遍历结果存储到结果列表中。
- 每遍历完一个方向后,调整对应的边界,并判断是否需要继续遍历。
- 循环直至遍历完所有元素。
代码实现
java">import java.util.ArrayList;
import java.util.List;public class SpiralMatrix {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return result;}int m = matrix.length;int n = matrix[0].length;int top = 0, bottom = m - 1, left = 0, right = n - 1;while (top <= bottom && left <= right) {// Traverse from left to rightfor (int i = left; i <= right; i++) {result.add(matrix[top][i]);}top++;// Traverse from top to bottomfor (int i = top; i <= bottom; i++) {result.add(matrix[i][right]);}right--;if (top <= bottom) {// Traverse from right to leftfor (int i = right; i >= left; i--) {result.add(matrix[bottom][i]);}bottom--;}if (left <= right) {// Traverse from bottom to topfor (int i = bottom; i >= top; i--) {result.add(matrix[i][left]);}left++;}}return result;}public static void main(String[] args) {SpiralMatrix solution = new SpiralMatrix();// 示例测试int[][] matrix1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};System.out.println("输入矩阵1:" + Arrays.deepToString(matrix1));System.out.println("螺旋顺序遍历结果:" + solution.spiralOrder(matrix1));int[][] matrix2 = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};System.out.println("输入矩阵2:" + Arrays.deepToString(matrix2));System.out.println("螺旋顺序遍历结果:" + solution.spiralOrder(matrix2));}
}
示例演示
展示了两个不同规模的矩阵输入,并输出了按照顺时针螺旋顺序遍历后的结果。
复杂度分析
该解法的时间复杂度为 O(m*n),其中 m 是矩阵的行数,n 是矩阵
的列数。空间复杂度为 O(1),除了存储结果的列表外,没有使用额外的空间。
总结
本篇博客介绍了如何按照顺时针螺旋顺序遍历给定的矩阵,并给出了具体的解题思路和代码实现。希望这篇文章能够帮助你理解和掌握这道经典算法题目!
扩展阅读
这篇博客详细介绍了力扣经典150题中的第三十五题:螺旋矩阵,包括题目详解、解题思路、代码实现、示例演示、复杂度分析和总结。希望对你有所帮助!