给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
把每一圈循环分成四次小循环
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ret;
if (matrix.empty()) { // 如果为空,直接返回空
return ret;
}
// 定义上下左右边界
int upper = 0;
int bottle = matrix.size() - 1; // matrix.size()计算出matrix中的vector个数,行数
int left = 0;
int right = matrix[0].size() - 1; // 计算出每个vector中的元素个数,列数
while (true) {
for (int i = left; i <= right; ++i) // 从右向左依次遍历
ret.push_back(matrix[upper][i]);
if (++upper > bottle) break; // 重新定义上边界
for (int i = upper; i <= bottle; ++i)
ret.push_back(matrix[i][right]);
if (--right < left) break;
for (int i = right; i >= left; --i)
ret.push_back(matrix[bottle][i]);
if (--bottle < upper) break;
for (int i = bottle; i >= upper; --i)
ret.push_back(matrix[i][left]);
if (++left > right) break;
}
return ret;
}
};