本题相较于螺旋矩阵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;}
};