思路:
处理好转弯时候的选择,然后再在转弯的时候做处理。
//先 右 下 左 上
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int n=matrix.size(),m=matrix[0].size();
vector<int> res;
if(!n) return res;
vector<vector<bool>> st(n, vector<bool>(m));
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int d=0;
int x=0,y=0;
for(int i=0;i<n*m;i++){
res.push_back(matrix[x][y]);
st[x][y]=true;
int a=x+dx[d], b=y+dy[d];
//如果出现矛盾
if(a < 0 || a>=n || b<0 || b>=m || st[a][b]){
//改变方向
d=(d+1)%4;
a=x+dx[d], b=y+dy[d];
}
x=a;
y=b;
}
return res;
}
};
评论区