牛客题霸 转圈打印矩阵 C++题解/答案

题目描述

给定一个整型矩阵matrix,请按照顺时针转圈的方式打印它。
示例1
输入
复制
[[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]

题解:

题意很明确,就是让顺时针走矩阵
直接模拟就行

如图一样,设

int end=n-1;
int beg=0;
int l=0;
int r=m-1;

四个变量,分别表示矩形的上下和左右,然后按照图中红色箭头的顺序一样存入vectorsum内即可
当(end = = beg)时,说明行的已经取完,就不用再取了
(l = = r)时也是一样
自己模拟模拟过程就能感受出来

代码:

class Solution {
   
public:
    /**
     * 
     * @param matrix int整型vector<vector<>> the matrix
     * @return int整型vector
     */
    vector<int> printMatrix(vector<vector<int> >& matrix) {
   
        // write code here
        int n=matrix.size();//lie
        int m=matrix[0].size();//hang
        vector<int>sum;
        int end=n-1;
        int beg=0;
        int l=0;
        int r=m-1;
        int i;
        while(end>=beg&&l<=r)
        {
   
            for(int i=l;i<=r;i++)
                sum.push_back(matrix[beg][i]);
            for(int i=beg+1;i<=end;i++)
            {
   
                sum.push_back(matrix[i][r]);
            }
            for(int i=r-1;i>=l;i--)
            {
   
                if(end==beg)break;
                sum.push_back(matrix[end][i]);
            }
            for(int i=end-1;i>=beg+1;i--)
            {
   
                if(l==r)break;
                sum.push_back(matrix[i][l]);
            }
            beg++;
            end--;
            l++;
            r--;
            
        }
        return sum;
    }
};