剑指Offer刷题(顺时针打印矩阵)

本文介绍了一种算法,用于按顺时针方向打印矩阵中的元素。通过C++实现,详细展示了如何遍历矩阵并正确地按指定顺序输出数字。特别关注了边界条件的处理,确保算法的正确性和效率。

剑指Offer刷题(顺时针打印矩阵)

一.题目描述

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

二.代码(C++)

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int l =matrix.size(),w =matrix[0].size();
        vector<int> output;
        if(l==0 || w==0)
            return output;
        int li=0,lr=l-1,wi=0,wr=w-1;
        while(li<=lr && wi<=wr)
        {
            int i=li,j=wi;
            output.push_back(matrix[i][j]);
            for(i=li,j=wi+1;j<=wr;++j)
                output.push_back(matrix[i][j]);
            for(i=li+1,j=wr;i<=lr;++i)
                output.push_back(matrix[i][j]);
            if(lr!=li)
            {
                for(i=lr,j=wr-1;j>=wi;--j)
                    output.push_back(matrix[i][j]);
            }
            if(wr!=wi)
            {
                for(i=lr-1,j=wi;i>li;--i)
                    output.push_back(matrix[i][j]);
            }
            li++;wi++;lr--;wr--;
        }
        return output;
    }
};

三.提交记录

在这里插入图片描述

四.备注

编写打印一圈的代码,循环即可。注意判断是否需要打印逆时针的第三部分和第四部分,避免重复打印(当剩余矩阵只剩一行或一列时不用打印)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值