剑指offer之顺时针打印矩阵

本文介绍了一种使用C++实现的算法,该算法能够按顺时针方向从外到内打印给定矩阵的所有元素。通过定义边界并逐步向内循环遍历的方式实现了这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

思路:利用循环,控制循环条件即可

具体代码如下:(C++)

class Solution

{

public:

    vector<int> printMatrix(vector<vector<int>> matrix)

    {

            int rows, columns;

            if(matrix.size() > 0)

            {

                    rows = matrix.size();

                    columns = matrix[0].size();

            }

            vector<int> res;    //由于保存结果

            int  startX = 0,  endX = columns -1;

            int  startY = 0,  endY = rows -1;

            while(startX <= endX && startY <= endY)

            {

                    if(startX <= endX && startY <= endY)

                    {

                            for(int i = startX; i<= endX; i++)

                                    res.push_back(matrix[startY][i]);    //上一行

                            ++startY;

                    }

                    if(startY <= endY  && startX <=endX)

                    {

                            for(int i = startY; i<=endY; i++)

                                    res.push_back(matrix[i][endX]);  //右一列

                            --endX;

                    }

                    if(startX <= endX && startY <= endY)

                    {

                            for(int i =endX; i>=startX; i--)

                                     res.push_back(matrix[endY][i]);  //下一行

                            --endY;

                    }

                    if(startY <= endY && startX <= endX)

                    {

                            for(int i=endY;i>= startY;i--)

                                    res.push_back(matrix[i][startX]);   //左一列

                            ++startX;

                    }

            }

            return res;

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值