spiralOrder(vector<vector<int>>& matrix)
时间: 2024-10-15 08:17:23 浏览: 34
`spiralOrder`是一个函数,通常用于将给定矩阵按照螺旋顺序(类似钟表的顺时针或逆时针)遍历并返回结果。这个函数接收一个二维整数向量(vector<vector<int>>)作为输入参数,代表一个矩阵。例如:
```cpp
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
int m = matrix.size(), n = matrix[0].size();
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0}; // 指向四个相邻位置的方向
int x = 0, y = 0, dir = 0; // 初始位置和方向
while (x < m && y < n) {
// 把当前行添加到结果
for (int i = 0; i < min(x + 1, n); ++i) {
result.push_back(matrix[x][i]);
}
x += dir;
// 如果到达右边界,换行并向左移动
if (x == m) {
dir ^= 1; // 右边界,改变方向为向上
for (int i = 0; i < min(y + 1, m - x); ++i) {
result.push_back(matrix[m - 1 - i][y]);
}
y += 1 - dir;
}
// 如果到达下边界,转列并向下移动
else if (y == n) {
dir ^= 2; // 下边界,改变方向为向右
for (int i = 0; i < min(m - x - 1, n - y); ++i) {
result.push_back(matrix[m - 1 - i][n - 1]);
}
m -= 1 - dir;
}
// 如果到达上边界,回溯列并向上移动
else if (x == 0) {
dir ^= 3; // 上边界,改变方向为向下
for (int i = 0; i < min(n - y - 1, x); ++i) {
result.push_back(matrix[i][n - 1]);
}
n -= 1 - dir;
}
}
return result;
}
```
阅读全文