本题相较于螺旋矩阵II的不同之处是:螺旋矩阵II的矩阵是n行n列的方阵,而本题的矩阵并不一定是方阵。所以在遵循循环不变量原则遍历完矩阵后,还会有一行或者一列没有遍历。
1、行多列少(多一列没遍历)

2、行少列多(多一行没遍历)

对于多出来的一行或者一列,要在遍历完每一个整圈之后,单独处理。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int width = matrix[0].size();
int height = matrix.size();
int times=min(width/2, height/2);
vector<int> result;
int startX;
int startY;
for(int i=0; i<times; i++)
{
startX=i;
startY=i;
for(; startY<width-i-1; startY++)
{
result.push_back(matrix[startX][startY]);
}
for(; startX<height-i-1; startX++)
{
result.push_back(matrix[startX][startY]);
}
for(; startY>i; startY--)
{
result.push_back(matrix[startX][startY]);
}
for(; startX>i; startX--)
{
result.push_back(matrix[startX][startY]);
}
}
if(width>height)
{
if(height%2!=0)
{
startX = height/2;
startY = height/2;
for(; startY<width-height/2; startY++)
{
result.push_back(matrix[startX][startY]);
}
}
}
else
{
if(width%2!=0)
{
startX = width/2;
startY = width/2;
for(; startX<height-width/2; startX++)
{
result.push_back(matrix[startX][startY]);
}
}
}
return result;
}
};