🧩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 <= botl <= r,否则单行 / 单列会重复
  • 边界收缩位置写错(先收缩还是先走完)是高频错
  • 跟 59. 螺旋矩阵 II 是同一套模板,只是填值
Related · 矩阵