【second】Spiral Matrix

注意条件。

    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        vector<int> res;
        if(matrix.empty()||matrix[0].empty())
            return res;
        int m = matrix.size();
        int n = matrix[0].size();
        int startx = 0,starty = 0;
        while(2*startx<m&&2*starty<n)
        {
            generate(startx,starty,m-1-startx,n-1-starty,res,matrix);
            ++startx;
            ++starty;
        }
        return res;
        
    }
    
    void generate(int startx,int starty,int endx,int endy,vector<int>& res,vector<vector<int> >& matrix)
    {
        int i;
        for(i=starty;i<=endy;i++)
            res.push_back(matrix[startx][i]);

        for(i=startx+1;i<=endx;i++)
            res.push_back(matrix[i][endy]);
        
        if(startx<endx)
        {
            for(i=endy-1;i>=starty;i--)
                res.push_back(matrix[endx][i]);
        }
        if(starty<endy)
        {
            for(i=endx-1;i>=startx+1;i--)
                res.push_back(matrix[i][starty]);
        }
    }

  

posted @ 2013-10-18 19:59  summer_zhou  阅读(100)  评论(0编辑  收藏  举报