剑指offer刷题13 顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

解题思路

这道题的标签是较难,但好像也没有较难的地方,就是按照顺时针的顺序遍历数组,然后输出。我把顺时针转的一个圈看成一个循环,每一趟循环又分成四个小循环,分别是上边一行,右边一列,下边一行,左边一列,判断好这些边界关系即可

我遇到的问题

1、矩阵不一定是方形的,有可能是矩形的,矩阵宽:array.size(),长:array[0].size()
2、每一圈的循环不一定是包括四个,可能只有上边一行,可能只有上边一行+右边一列,可能只有上边一行+右边一列+下边一行,要覆盖到所有的情况
3、关于一共几圈的循环判断 每次循环都以行-2,列-2为计数器,当这两个值都减到0时,循环也就结束了

源代码

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int len=matrix.size();
        int hang=matrix[0].size();
        vector<int> chloe;
        for(int i=0;len-i*2>0&&hang-2*i>0;i++){
            for(int j=i;j<hang-i;j++){
                chloe.push_back(matrix[i][j]);
            }
            for(int k=i+1;k<len-i;k++){
                chloe.push_back(matrix[k][hang-i-1]);
            }
            if(len-2*i-1>0){
            for(int m=hang-i-2;m>=i;m--){
                chloe.push_back(matrix[len-i-1][m]);
            }}
            if(hang-i-2>=0){
            for(int n=len-i-2;n>i;n--){
                chloe.push_back(matrix[n][i]);
            }}
        }
       return chloe;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值