【54. 螺旋矩阵】遇0或左侧边界换方向/收缩边界
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int xx[4]={0,1,0,-1};
int yy[4]={1,0,-1,0};
vector<int> res;
int m=(int)matrix.size();//求矩阵行数
// int m=sizeof(matrix)/sizeof(int);这个算出来不对,不知道为啥
int n=(int)matrix[0].size();//求矩阵列数
for(int i=0;i<m;i++)
{
matrix[i].push_back(0);
}
vector<int> zero;
for(int i=0;i<=n;i++)
{
zero.push_back(0);
}
matrix.push_back(zero);
int step=0;
int i=0,j=0,k=0;
while(step!=m*n)
{
step++;
res.push_back(matrix[i][j]);
matrix[i][j]=0;
i+=xx[k];
j+=yy[k];
if(j==-1||matrix[i][j]==0)//最外圈左边记得判断,因为没加0,否则会越界!出现-1
{
i-=xx[k];
j-=yy[k];
k=(k+1)%4;
i+=xx[k];
j+=yy[k];
}
}
return res;
}
};