给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
if (matrix.empty())
return ans; // 若数组为空,直接返回答案
int left = 0;
int m = matrix.size() - 1;
int n = matrix[0].size() - 1;
int right = n;
int up = 0;
int down = m;
while (true) {
// left往r走 站在up行
for (int i = left; i <= right; i++) {
ans.push_back(matrix[up][i]);
}
up++; // up遍历完 更新up
//如果超过down 说明结束 跳出
if (up > down) {
break;
}
// up往down走 站在right列
for (int i = up; i <= down; i++) {
ans.push_back(matrix[i][right]);
}
right--;
if (right < left) {
break;
}
for (int i = right; i >= left; i--) {
ans.push_back(matrix[down][i]);
}
down--;
if (down < up) {
break;
}
// down往up走 站在left列
for (int i = down; i >= up; i--) {
ans.push_back(matrix[i][left]);
}
left++;
if (left > right) {
break;
}
}
return ans;
}
};