54. 螺旋矩阵
- 题号:54
- 来源:LeetCode
- 难度:中等
- 标签:
矩阵模拟 - 语言:TypeScript · Python
- 解法:2 个
- 作者:lmliheng
- 最近更新:2026-09-29
TypeScript
TypeScript · O(m*n) 时间 · O(1) 空间 · 更新于 2026-09-27
四边界收缩模拟螺旋读取
typescript
/**
* @difficulty medium
* @tags 矩阵,模拟
* @time O(m*n)
* @space O(1)
* @note 四边界收缩模拟螺旋读取
* @54. 螺旋矩阵
*/
var spiralOrder = function (matrix: number[][]) {
let res = []
let m = matrix.length
let n = matrix[0].length
let t = 0
let r = n - 1
let b = m - 1
let l = 0
let num = 1
let nums = m * n
while (num <= nums) {
for (let i = l; i <= r; i++) {
res.push(matrix[t][i])
num++
}
t++
for (let i = t; i <= b; i++) {
res.push(matrix[i][r])
num++
}
r--
if (t > b) break
for (let i = r; i >= l; i--) {
res.push(matrix[b][i])
num++
}
b--
if (l > r) break
for (let i = b; i >= t; i--) {
res.push(matrix[i][l])
num++
}
l++
}
return res
};Python
Python · O(n*m) 时间 · O(1) 空间 · 更新于 2026-09-29
四条边界收缩模拟螺旋遍历
python
"""
@difficulty medium
@tags 矩阵,模拟
@time O(n*m)
@space O(1)
@note 四条边界收缩模拟螺旋遍历
54. 螺旋矩阵
"""
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res=[]
m=len(matrix)
n=len(matrix[0])
l=0
r=n-1
t=0
b=m-1
while l<=r and t<=b:
for i in range(l,r+1,1):
res.append(matrix[t][i])
t+=1
for i in range(t,b+1,1):
res.append(matrix[i][r])
r-=1
if t <= b:
for i in range(r,l-1,-1):
res.append(matrix[b][i])
b-=1
if l<=r:
for i in range(b,t-1,-1):
res.append(matrix[i][l])
l+=1
return res源码:python/leetcode/hot100/19.py
在 GitHub 上查看题目所在目录:lmliheng/algorithm