题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路
模拟,朝一个方向走,走过的点标记一下,直到碰到边界或碰到已经走过的路,换个方向。右->下,下->左,左->上,上->右。直到走完所有点。
代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
ans.clear();
int len1=matrix.size();
if(len1==0){
return ans;
}
int len2=matrix[0].size();
int i=0,j=-1,direct[5][3]={{-1,0},{1,0},{0,-1},{0,1}},m=len1*len2,a=0,b=1;
bool vis[len1+7][len2+7];
memset(vis,false,sizeof(vis));
while(m--){
i+=a;
j+=b;
ans.push_back(matrix[i][j]);
vis[i][j]=true;
if(a==-1){
if(i-1<0||vis[i-1][j]==true){
a=0;
b=1;
}
}
if(a==1){
if(i+1>=len1||vis[i+1][j]==true){
a=0;
b=-1;
}
}
if(b==-1){
if(j-1<0||vis[i][j-1]==true){
a=-1;
b=0;
}
}
if(b==1){
if(j+1>=len2||vis[i][j+1]==true){
a=1;
b=0;
}
}
}
return ans;
}
};