用top、right、bottom、left四变量模拟螺旋遍历,核心是“缩圈”:每走完一行或一列即收缩对应边界,且每次遍历前必须检查边界有效性(如top≤bottom、left≤right),否则跳过该方向,避免越界与死循环。

怎么用四个变量模拟螺旋遍历的边界
直接用 top、right、bottom、left 四个整型变量代表当前未访问区域的上下左右边界,比用二维坐标或方向向量更直观、更少出错。关键不是“存方向”,而是“缩圈”——每走完一行或一列,对应边界就收缩一次。
常见错误是收缩时机不对:比如从左到右走完上边后,top 应立刻加 1;但从上到下走完右边后,right 必须在确认还有列可走的前提下才减 1,否则可能越界访问。
-
top初始为 0,每次走完上边行后执行top++ -
right初始为cols - 1,每次走完右边列后执行right-- -
bottom初始为rows - 1,每次走完下边行后执行bottom-- -
left初始为 0,每次走完左边列后执行left++
为什么每次转向前都要检查边界是否有效
矩阵不一定是方阵,走完上边后如果 top > bottom,说明已无剩余行,后续的“从上到下”和“从下到上”都该跳过。同理,走完右边后若 left > right,则列已耗尽。
漏掉这个判断会导致重复写入、越界读取,甚至死循环(比如 top == bottom == 0 时反复走同一行)。
- 从左到右遍历前:检查
top - 从上到下遍历前:检查
left - 从右到左遍历前:检查
top - 从下到上遍历前:检查
left
四个方向的遍历顺序和索引怎么写才不混淆
顺序固定为:上 → 右 → 下 → 左,不能调换。每轮只操作一个边界维度,另一个维度固定。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
容易错的是下边和左边的循环条件:下边是从右往左,但起始是 right,终点是 left(含),所以用 for (int j = right; j >= left; j--);左边是从下往上,起始是 bottom,终点是 top(含),所以是 for (int i = bottom; i >= top; i--)。
示例片段(填充结果数组 res):
while (top = left; j--) res.push_back(matrix[bottom][j]);
bottom--;
}
if (left = top; i--) res.push_back(matrix[i][left]);
left++;
}
}
空矩阵或单行/单列时为什么仍能正确退出
靠最外层的 while (top 控制整体流程。空矩阵(<code>rows == 0 || cols == 0)初始就不满足条件,直接跳过;单行时 top == bottom,走完上边后 top 变成 top + 1,此时 top > bottom,后续两个方向的 if 判断自然失效。
真正容易被忽略的是:四个方向中后两个必须加 if 包裹,因为它们依赖前两个收缩后的边界状态。不加的话,单行矩阵会尝试走“下边”(实际不存在),导致重复或越界。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










