class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
if(matrix.empty())return ans;
int n=matrix.size(),m=matrix[0].size();
vector<vector<bool>>rec(n,vector<bool>(m,false));//标记数组
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};//方向上右下左
int x=0,y=0,d=1;//让开始是右方向
for(int i=0;i<n*m;i++)
{
ans.push_back(matrix[x][y]);
rec[x][y]=true;//标记为走过
int a=x+dx[d],b=y+dy[d];//下一个位置如果到边界或者走过就变方向;
if(a<0||a>=n||b<0||b>=m||rec[a][b])
{
d=(d+1)%4;//用小技巧来循环方向
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
return ans;
}
};
leetcode 54. 螺旋矩阵
最新推荐文章于 2025-01-01 14:17:09 发布