不懂自己这么水的题居然WA了这么多次
而且 为啥要设置flag 反正都是顺时针
自己写的
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
if(matrix.empty())
return ans;
int flag=0;
int x=0,y=0;
int n=matrix[0].size();
int m=matrix.size();
if(m==1)
return matrix[0];
while(1){
if(matrix[x][y]==INT_MAX)
break;
if(flag==0){
for(;y<n&&matrix[x][y]!=INT_MAX;y++){
ans.push_back(matrix[x][y]);
matrix[x][y]=INT_MAX;
}
y--;x++;
flag=1;
}
else if(flag==1){
for(;x<m&&matrix[x][y]!=INT_MAX;x++){
ans.push_back(matrix[x][y]);
matrix[x][y]=INT_MAX;
}
x--;y--;
flag=2;
}
else if(flag==2){
for(;y>=0&&matrix[x][y]!=INT_MAX;y--){
ans.push_back(matrix[x][y]);
matrix[x][y]=INT_MAX;
}
x--;y++;
flag=3;
}
else if(flag==3){
for(;x>=0&&matrix[x][y]!=INT_MAX;x--){
ans.push_back(matrix[x][y]);
matrix[x][y]=INT_MAX;
}
x++;y++;
flag=0;
}
}
return ans;
}
};
改的
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
if(matrix.empty())
return ans;
int x=0,y=0;
int n=matrix[0].size();
int m=matrix.size();
while(x<m&&y<n){
for(int i=y;i<n;i++){
ans.push_back(matrix[x][i]);
}
for(int i=x+1;i<m;i++){
ans.push_back(matrix[i][n-1]);
}
for(int i=n-2;i>=y&&x!=m-1;i--){
ans.push_back(matrix[m-1][i]);
}
for(int i=m-2;i>x&&y!=n-1;i--){
ans.push_back(matrix[i][y]);
}
x++;y++;
m--;n--;
}
return ans;
}
};