qingcheng奕  

https://oj.leetcode.com/problems/spiral-matrix/

螺旋矩阵,逆着转,输出矩阵中的元素。

在纸上模仿,然后记左上角(l1,l2)右上角(l1,r2),左下角(p1,l2)右下角(p1,r2).

然后4个for循环从一个点到另一个点位置遍历。

while控制总的。

当在一次遍历中,没有要输出的点,说明遍历结束。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        vector<int> ans;
        int row = matrix.size();
        if(row == 0)
            return ans;
        if(row ==1)
        {
            for(int i = 0;i<matrix[0].size();i++)
                ans.push_back(matrix[0][i]);
            return ans;
        }
        int col = matrix[0].size();

        int l1,l2,r2,p1;
        l1 = 0;
        l2 = 0;
        r2 = col - 1;
        p1 = row -1;
        
        while(1)
        {
            int i;
            if(l2>r2)
                break;
            for(i = l2; i <= r2; i++)
                ans.push_back(matrix[l1][i]);

            if(l1+1>p1)
                break;
            for(i = l1+1;i<= p1;i++)
                ans.push_back(matrix[i][r2]);

            if(r2-1<l2)
                break;
            for(i = r2-1;i>=l2;i--)
                ans.push_back(matrix[p1][i]);

            if(p1-1<l1+1)
                break;
            for(i = p1-1;i>=l1+1;i--)
                ans.push_back(matrix[i][l2]);
            l1++;
            l2++;
            r2--;
            p1--;
        }
        return ans;
    }
};

 

posted on 2014-06-21 11:28  qingcheng奕  阅读(317)  评论(0编辑  收藏  举报