class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<int> res;
// 定义四个方向的边界:左、右、上、下
int left = 0 , right = n - 1;
int top = 0, down = m - 1;
// 当左边界不超过右边界,且上边界不超过下边界时,循环继续
while (left <= right && top <= down) {
// 从左到右填充上边界的行
for (int i = left; i <= right; i++) {
res.push_back(matrix[top][i]);
}
top++; // 上边界下移
// 从上到下填充右边界的列
for (int i = top; i <= down; i++) {
res.push_back(matrix[i][right]);
}
right--; // 右边界左移
// 从右到左填充下边界的行
if (top <= down) { // 添加检查以避免重复
for (int i = right; i >= left; i--) {
res.push_back(matrix[down][i]);
}
down--; // 下边界上移
}
// 从下到上填充左边界的列
if (left <= right) { // 添加检查以避免重复
for (int i = down; i >= top; i--) {
res.push_back(matrix[i][left]);
}
left++; // 左边界右移
}
}
// 返回填充完成的矩阵
return res;
}
};