LeetCode 54. 螺旋矩阵
原题链接
中等
作者:
大大辉将军
,
2023-09-24 10:39:37
,
所有人可见
,
阅读 55
优雅旋转
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
ans.push_back(1);
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
int stX = 0, stY = 0;
int cntR = matrix.size(), cntC = matrix[0].size();
while(cntR > 1 && cntC > 1){
int x = stX, y = stY;
for(int i = 0; i < 4; i ++){
int sentry = i % 2 ? cntR : cntC;
ans.pop_back();
for(int j = 0; j < sentry; j ++){
ans.push_back(matrix[x][y]);
x += dx[i];
y += dy[i];
}
x -= dx[i];
y -= dy[i];
}
stX ++, stY ++;
cntC -= 2, cntR -= 2;
}
ans.pop_back();
if(cntR == 1){ //处理只有一行的特殊情况
for(int i = 0; i < cntC; i ++)
ans.push_back(matrix[stX][stY + i]);
}
else if(cntC == 1){ //处理只有一列的特殊情况
for(int i = 0; i < cntR; i ++)
ans.push_back(matrix[stX + i][stY]);
}
return ans;
}
};