矩阵——螺旋矩阵

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

核心思路
四个边界控制遍历范围:

  1. 上边界 top、下边界 bottom
  2. 左边界 left、右边界 right
  3. 按 **右→下→左→上 **顺序循环遍历,每遍历完一条边就收缩对应边界,直到边界交叉结束

完整代码实现如下
#include
#include
using namespace std;

class Solution {
public:
vector spiralOrder(vector<vector>& matrix) {

vector res; // 存储结果
if (matrix.empty()) return res; // 空矩阵直接返回

// 初始化四个边界
int top = 0;
int bottom = matrix.size() - 1;
int left = 0;
int right = matrix[0].size() - 1;

while (true) {
// 1. 从左到右 遍历上边界
for (int i = left; i <= right; ++i) {
res.push_back(matrix[top][i]);
}
if (++top > bottom) break; // 上边界下移,越界则结束

// 2. 从上到下 遍历右边界
for (int i = top; i <= bottom; ++i) {
res.push_back(matrix[i][right]);
}
if (--right < left) break; // 右边界左移,越界则结束

// 3. 从右到左 遍历下边界
for (int i = right; i >= left; --i) {
res.push_back(matrix[bottom][i]);
}
if (--bottom < top) break; // 下边界上移,越界则结束

// 4. 从下到上 遍历左边界
for (int i = bottom; i >= top; --i) {
res.push_back(matrix[i][left]);
}
if (++left > right) break; // 左边界右移,越界则结束
}
return res;
}
};

// 测试代码
int main() {

// 示例矩阵 3x3
vector<vector> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

Solution sol;
vector result = sol.spiralOrder(matrix);

// 输出结果
cout << "顺时针螺旋顺序:";
for (int num : result) {
cout << num << " ";
}
cout << endl;

return 0;
}

代码说明

1.边界初始化

  • top = 0:最上面一行
  • bottom = 矩阵行数-1:最下面一行
  • left = 0:最左边一列
  • right = 矩阵列数-1:最右边一列

2.四步循环遍历
左→右:遍历完上边界后,top++(上边界向下收缩)
上→下:遍历完右边界后,right--(右边界向左收缩)
右→左:遍历完下边界后,bottom--(下边界向上收缩)
下→上:遍历完左边界后,left++(左边界向右收缩)

3.终止条件
每次收缩边界后判断是否越界,一旦 top > bottom 或 left > right,说明所有元素遍历完成。

posted @ 2026-03-31 10:22  ZealousMclaren  阅读(13)  评论(0)    收藏  举报