+ +给定m+×+n个元素(m行,n列)的矩阵,以螺旋顺序返回矩阵的所有元素。输入为m+n以及m*n的矩阵,输出螺旋顺序的所有元素 + + + +示例1: + + + +输入: + +
时间: 2023-11-17 07:04:42 浏览: 71
这是一个经典的矩阵螺旋遍历问题,可以使用模拟的方法来解决。具体思路如下:
1. 定义四个变量,分别表示当前遍历到的上下左右边界,初始值为0和n-1(n为列数)。
2. 按照顺序遍历矩阵,每次遍历完一行或一列后,更新对应的边界值。
3. 当上下左右边界相遇时,遍历结束。
以下是具体的代码实现:
```
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if (matrix.empty()) return res;
int m = matrix.size(), n = matrix[0].size();
int up = 0, down = m - 1, left = 0, right = n - 1;
while (true) {
// 从左到右遍历上边界
for (int i = left; i <= right; ++i) res.push_back(matrix[up][i]);
if (++up > down) break;
// 从上到下遍历右边界
for (int i = up; i <= down; ++i) res.push_back(matrix[i][right]);
if (--right < left) break;
// 从右到左遍历下边界
for (int i = right; i >= left; --i) res.push_back(matrix[down][i]);
if (--down < up) break;
// 从下到上遍历左边界
for (int i = down; i >= up; --i) res.push_back(matrix[i][left]);
if (++left > right) break;
}
return res;
}
```
阅读全文