324 字
2 分钟
LeetCode-54.螺旋矩阵
2026-03-08

矩阵#

54. 螺旋矩阵

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


示例 1:

img

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

img

输入: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]

打了补丁的自己的解法

我靠,这个矩形我看半天没看出来哪里写错了,后来看了ai才发现矩形会有一条行/列,没有消耗完,会继续执行的

思路: 参照59. 螺旋矩阵 II

难点:

  • 正方形特殊之处是行和列是一样多的,向右走完后,剩下的一定是空集。向左的循环自然进不去。
  • 长方形向右走完后行和列是不一样多的,行虽然死了,但列还活着。代码就会依靠还活着的“列条件”,继续执行
func spiralOrder(matrix [][]int) []int {
m := len(matrix)
n := len(matrix[0])
res := []int{}
top, bottom := 0, m-1
left, right := 0, n-1
for len(res) < m * n {
for i := left; i <= right; i++ {
res = append(res, matrix[top][i])
}
top++
if top > bottom {
break
}
for i := top; i <= bottom; i++ {
res = append(res, matrix[i][right])
}
right--
if left > right {
break
}
for i := right; i >= left; i-- {
res = append(res, matrix[bottom][i])
}
bottom--
for i := bottom; i >= top; i-- {
res = append(res, matrix[i][left])
}
left++
}
return res
}
LeetCode-54.螺旋矩阵
https://sheep44044.github.io/posts/算法/矩阵/leetcode-54螺旋矩阵/
作者
sheep44044
发布于
2026-03-08
许可协议
CC BY-NC-SA 4.0