牛客-剑指offer--JZ19 顺时针打印矩阵

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> arr;        //创建一个容器来存储最后打印结果
        int wa=0,wz=matrix[0].size()-1,ha=0,hz=matrix.size()-1;  //分别记录横向和纵向遍历的初始范围
        int s=matrix.size()*matrix[0].size();  //矩阵总的元素个数
        while(arr.size()<s){    //当容器中元素个数少于矩阵元素总数时循环执行(一次循环是顺时针一圈)
            for(int i=wa;i<=wz;i++){                                        //从左到右
                arr.push_back(matrix[ha][i]);
            }
                  
           for(int i=ha+1;i<=hz;i++){                                 //从上到下
               arr.push_back(matrix[i][wz]);
           }
            if(arr.size()<s){   //再次判断元素是否已遍历完毕,防止只有一行时又倒回重复遍历
                for(int i=wz-1;i>=wa;i--){                                //从右到左
                    arr.push_back(matrix[hz][i]);
                }
            }
            if(arr.size()<s){   //再次判断元素是否已遍历完毕,防止只有一列时又倒回重复遍历
                for(int i=hz-1;i>=ha+1;i--){                            //从下到上
                    arr.push_back(matrix[i][wa]);
                }
            }
            wz--;
            hz--;
            wa++;
            ha++;   //每遍历完一圈,起点和终点范围都缩小一个,所以遍历起点+1,终点-1。
        }
        return arr;
    }
};

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值