顺时针打印矩阵

Posted Bill_LHR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺时针打印矩阵相关的知识,希望对你有一定的参考价值。


  • 题目描述:

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

  • 分析:

    这个题的重点是坐标点控制,循环的控制和边界的设置比较容易出错,最开始我没有写出来完整的代码,看了牛客上各路大神的思路后写下了一种我认为理解起来容易的方法:利用left、right、top以及bottom来控制边界,但要注意的是排除重复的情况。

    vector<int> printMatrix(vector<vector<int> > matrix) {
    	int rows = matrix.size();
        int cols = matrix[0].size();
        vector<int> res;
        if(rows == 0 || cols == 0)
            return res;
        
        int left = 0,right = cols - 1,top = 0,bottom = rows - 1;
        while(left <= right && top <= bottom){
            for(int i = left; i <= right; ++i)
                res.push_back(matrix[top][i]);
            for(int i = top + 1; i <= bottom; ++i)
                res.push_back(matrix[i][right]);
            if(top != bottom){
            	for(int i = right - 1; i >= left; --i)
               		res.push_back(matrix[bottom][i]);
            }
            if(left != right){
            	for(int i = bottom - 1; i > top; --i)
                	res.push_back(matrix[i][left]);
            }
            ++left,--right,++top,--bottom;
        }
        return res;
    }
    

    另外,在看着道题的时候发现了《剑指offer》作者何海涛博客上的解析:程序员面试题精选100题(51)-顺时针打印矩阵[算法]

以上是关于顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

顺时针打印矩阵

剑指offer--29顺时针打印矩阵

剑指offer 19.顺时针打印矩阵

顺时针打印矩阵

剑指offer:顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵 的 详细题解