leetcode[59]Spiral Matrix II

本文介绍了一种使用C++实现螺旋填充矩阵的方法。通过定义边界和循环填充的方式,该算法能高效地生成螺旋矩阵,并针对不同大小的矩阵进行了特殊处理。
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int> > ret(n,vector<int>(n , 0));
        int left = 0;
        int right = n-1;
        int down =n-1;
        int top =0;
        int index =1;
        while(index<=n*n){
            if(left==right&&down==top){
                ret[down][left]=index;
                index++;
            }
            for(int i = left;i<right;i++,index++)
            {
                 
                ret[top][i]=index;
            }
            for(int j=top; j<down;j++,index++){ 
                ret[j][right] = index;
            }
            for(int i =right;i>left;i--,index++)
            { 
                ret[down][i] = index;
            }
            for(int j =down;j>top;j--,index++ ){ 
                ret[j][left]=index;
            }
            left++;
            right--;
            top++;
            down--;
        }
        return ret;
    }

};


思路是:定四个坐标点 

        int left = 0;
        int right = n-1;
        int down =n-1;
        int top =0;

和一个计数值:int index =1;,每次递增Index往矩阵中填入index  

然后分别四次循环处理:从左上到右上;从右上到右下;。。。

                      关键点:每循环四次,四个坐标点往内部缩小一格

                     特殊处理:考虑n为奇数和偶数的不同情况。

                                      n为偶数,能够通过四种基本for循环处理结束,即达到Index = n*n

                                     n为奇数时,剩下最后一格出现:left==right&&down==top的情况,无法通过for处理

        所以增加判断处理:

           if(left==right&&down==top){
                ret[down][left]=index;
                index++;
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值