Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
通过看题目,我们知道spiral matrix是先右,后下左上,每次都是到不能再往前时改变方向。
class Solution {
public://上下左右循环遍历
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if (matrix.size())
{
vector<vector<int> > status(matrix.size(),vector<int>(matrix[0].size(),0));
int i=0,j=0,count=1;
res.push_back(matrix[i][j]);
status[i][j]=1;
int flag=1;//0待定
while(count!=matrix.size()*matrix[0].size())
{
//right 1
if ((flag==1||flag==0)&&j+1<matrix[0].size()&&!status[i][j+1])
{
res.push_back(matrix[i][j+1]);
status[i][j+1]=1;
j++;
count++;
flag=1;
continue;
}
else
flag=0;
//down 2
if ((flag==2||flag==0)&&i+1<matrix.size()&&!status[i+1][j])
{
res.push_back(matrix[i+1][j]);
status[i+1][j]=1;
count++;
i++;
flag=2;
continue;
}
else
flag=0;
//left 3
if ((flag==3||flag==0)&&j-1>=0&&!status[i][j-1])
{
res.push_back(matrix[i][j-1]);
status[i][j-1]=1;
count++;
j--;
flag=3;
continue;
}
else
flag=0;
//up 4
if ((flag==4||flag==0)&&i-1>=0&&!status[i-1][j])
{
res.push_back(matrix[i-1][j]);
status[i-1][j]=1;
count++;
i--;
flag=4;
continue;
}
else
flag=0;
}
}
return res;
}
};