(三)剑指offer 18 顺时针遍历数组

本文详细解析了一种矩阵螺旋打印的算法实现,介绍了如何通过维护四个边界变量来遍历矩阵,并给出了具体的C++代码实现。文章针对不同边界情况进行了详细的讨论。

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

需要维护四个变量 :

 left :矩阵的左边界

right:矩阵的右边界

upper:矩阵的上边界;

buttom:矩阵的下边界

遍历的顺序:

左——右:[left,right]      只有这一个不用另加判断剩余的三个都要另外判断;

上——下:[upper+1,buttom];判断它的前提是(lfet<right&&buttom>upper)

右——左:[right-1,left];需要判断;

下——上:[buttom-1,upper+1];需要判断


然后维护这四个变量;while(left<=right&&upper<=right)满足这个条件;



class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) 
    {
        vector<int>result;
        int m=matrix.size();
        int n;
        if(m!=0)
            n=matrix[0].size();
        if(m==0||n==0)
            return result;
        int left=0;
        int right=n-1;
        int upper=0;
        int buttom=m-1;
        
        while(left<=right&&upper<=buttom)//需要维护四个变量  左右上下;
        {
            //左-》右
           for(int i=left;i<=right;i++)//只有第一行不需要判断其余的都需要判断左右的大小上下的大小
               result.push_back(matrix[upper][i]);
            //上--》下
            if(upper<buttom)//注意这里一定要加上这一条 上<下;不然只有一行就直接结束,导致重复了;
                for(int j=upper+1;j<=buttom;j++)
                    result.push_back(matrix[j][right]);
            //右--》左
           if(left<right&&upper<buttom)//
                for(int i=right-1;i>=left;i--)
                    result.push_back(matrix[buttom][i]);
            //下--》上
            if(upper<buttom&&left<right)
            for(int j=buttom-1;j>=upper+1;j--)
                result.push_back(matrix[j][left]);
            left++;//维护这四个参数的大小
            right--;
            upper++;
            buttom--;
        }

        
        return result;
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值