Spiral Matrix
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> result; int row=matrix.size(); if(row==0) return result; int col=matrix[0].size(); int start=0; while(col>start*2&&row>start*2) { int endrow=row-start-1; int endcol=col-start-1; for(int i=start;i<=endcol;i++) result.push_back(matrix[start][i]); if(start<endrow) { for(int i=start+1;i<=endrow;i++) result.push_back(matrix[i][endcol]); } if(start<endcol&&start<endrow) { for(int i=endcol-1;i>=start;i--) result.push_back(matrix[endrow][i]); } if(endrow>=start+2&&start<endcol) { for(int i=endrow-1;i>=start+1;i--) result.push_back(matrix[i][start]); } start++; } return result; } };
这道题的思路有几个关键:
1. 首先将矩阵看成由若干个顺时针方向的圈组成
2. 每打印一圈,列和行分别减2,由此得出打印循环的边界条件
3. 将每一次打印分为四步:
从左向右、从上到下、从右向左、做下往上,一次考虑每种情况的边界条件