剑指offer题目19:顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

解答思路

其实想清楚了就不太难了,就是输出矩阵的一圈数据,然后圈子“半径”-1,继续输出。问题是我卡在细节的判断上面。。没有想到如果输入的数据只有一行的时候或者只有一列的时候。。

实现代码

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> collector;
        if(matrix.empty()) {
            return collector;
        }
        
        // 矩形的四个点
        int end_x = matrix[0].size()-1;
        int end_y = matrix.size()-1; 
        int start_x = 0, start_y = 0;

        while(start_y <= end_y && start_x <= end_x) {
            int i;

            for (i = start_x; i <= end_x; ++i)
            {
                collector.push_back(matrix[start_y][i]);
            }

            for (i = start_y + 1; i <= end_y; ++i)
            {
                collector.push_back(matrix[i][end_x]);
            }

            // 防止只有一行的情况,会导致倒叙输出那一行
            if(start_y != end_y) {
                for (i = end_x - 1; i >= start_x; --i)
                {
                    collector.push_back(matrix[end_y][i]);
                } 
            }
            

            // 防止只有一列的情况,会导致倒叙输出那一行
            if(start_x != end_x) {
                for (i = end_y - 1; i > start_y; --i)
                {
                    collector.push_back(matrix[i][start_x]);
                }
            }

            // 边框缩小
            ++start_x;
            ++start_y;
            --end_y;
            --end_x;
        }
        return collector;
    }
};
posted @ 2019-04-02 09:50  {-)大傻逼  阅读(119)  评论(0)    收藏  举报
欢迎转载,转载请注明本文地址。