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]
.
螺旋形地输出矩阵,注意边界判断,一定要往右,再往下,不一定往左再往上。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m=matrix.size();
cout<<m<<endl;
if (m==0)
return res;
int n=matrix[0].size();
cout<<n<<endl;
if (m==1) {
for (int i=0;i<n;i++)
res.push_back(matrix[0][i]);
return res;
}
if (n==1) {
for (int i=0;i<m;i++)
res.push_back(matrix[i][0]);
return res;
}
int i=0;
int j=0;
while(m>0 && n>0) {
for ( int k=0;k<n;k++)
res.push_back(matrix[i][j+k]);
for (int k=1;k<m;k++)
res.push_back(matrix[i+k][j+n-1]);
if (m>1)
for (int k=1;k<n;k++)
res.push_back(matrix[i+m-1][j+n-1-k]);
if (n>1)
for (int k=1;k<m-1;k++)
res.push_back(matrix[i+m-1-k][j]);
i++;
j++;
m-=2;
n-=2;
}
return res;
}
};