🧩Algo 矩阵
54. 螺旋矩阵
难度:🟡 Medium | 标签:矩阵、模拟 | 状态:⬜ LeetCode 链接
思路
四个边界 top / bottom / left / right,按 →↓←↑ 顺序扫一圈,每走完一条边收缩对应边界。
循环条件:top <= bottom && left <= right。
代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& m) {
vector<int> res;
int top = 0, bot = m.size() - 1, l = 0, r = m[0].size() - 1;
while (top <= bot && l <= r) {
for (int j = l; j <= r; ++j) res.push_back(m[top][j]);
++top;
for (int i = top; i <= bot; ++i) res.push_back(m[i][r]);
--r;
if (top <= bot) {
for (int j = r; j >= l; --j) res.push_back(m[bot][j]);
--bot;
}
if (l <= r) {
for (int i = bot; i >= top; --i) res.push_back(m[i][l]);
++l;
}
}
return res;
}
};
复杂度
- 时间 O(R · C),空间 O(1)(不算输出)
易错 / 回顾
- 第三、四条边要再判
top <= bot和l <= r,否则单行 / 单列会重复 - 边界收缩位置写错(先收缩还是先走完)是高频错
- 跟 59. 螺旋矩阵 II 是同一套模板,只是填值
Related · 矩阵