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. 将每一次打印分为四步:

从左向右、从上到下、从右向左、做下往上,一次考虑每种情况的边界条件

posted on 2016-05-22 11:27  summerkiki  阅读(150)  评论(0编辑  收藏  举报