leetcode 59 螺旋矩阵II

day2

就是一道模拟题哈。不过需要注意的是对每一条边的处理需要一致。

如图:

 这里就是处理每条边的时候,保证最后一个数不被处理。留着给下一条边处理。所以这里就需要一个offset值,来控制边界。当进入到下一个循环时。offset的值是会改变的。当然这里也需要注意,每一条边处理的起始点也会改变,所以需要两个变量 startx starty。

其实这里比较有意思的是,每个小循环for,结束以后,i,j都会刚好到下一条边将要操作的点上。原因就是因为,for循环最后还会进行一次对变量的 ++ 或 -- 操作。当一个大循环结束以后,i,j又会回到起点。

出现的问题:

二刷: 3.25

我是二刷,忘记了处理 n 为单数的情况,其实就是直接赋值就好。还有忘记了对定义的容器vector进行初始化。二维的vector和一维的初始化,不同。需要注意一下。

vector<int> result(A.size(), 0)

 vector<vector<int>> res(n, vector<int>(n, 0))

三刷:4.15

 只记得。。。四个循环,忘了 startx starty

也忘了奇数的情况。

发现之前没注意到的点:

在四个循环的时候,注意 i,j代表的是什么,这个res 是二维数组有关系

res[i][j] 

因为一维数组是需要连续的

i = startx

j = starty

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));   // 记得初始化
        int count = 1;
        int startx = 0, starty = 0, offset = 1;
        int loop = n / 2;
        int i,j;
        while(loop --)
        {
            i = startx, j = starty;
            //一边一边来,每一边的处理方式都保持一致。
            for(j = starty; j < n - offset; j++)
                res[i][j] = count++;
            for(i = startx ; i < n - offset; i++)
                res[i][j] = count++;
            for(;j > starty ; j--)
                res[i][j] = count++;
            for(; i > startx; i--)
                res[i][j] = count++;
            
            startx++;
            starty++;
            offset++;
        }
        // 忘记考虑单数的情况了
        if( n % 2)
            res[n / 2][n / 2] = count;
        return res;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值