Leetcode数组——59.螺旋矩阵II

题目

螺旋矩阵II

思路

  • 首先需要初始化一个二维数组
  • 明确需要4条边分开来进行遍历赋值,为了使4条边保持一致,每行/列最后的数字作为下一组的第一个数字(例如:图上3*3矩阵:12-34-54-78,最后给9赋值)

  •                                                                                                        图片作者右下角,侵权删
  • 明确绕圈遍历次数,不管n为奇数还是偶数,均循环n/2圈,若为奇数,则需要最后单独给[n][n]位置赋值
  • 为了简化,只设置一个控制圈数的变量offset

 

代码

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        //i指行,j指列
        //放置的值
        int a = 1;
        //建立二维数组
        vector<vector<int>> nums(n, vector<int>(n, 0));
        //控制转圈
        int offset = 0;

        //不管n是奇数还是偶数,都走n/2圈,相当于在n/2圈内走的是整边
        for(int k = 1;k <= n/2;k++)
        {
            //第一条边
            for(int j = offset;j < n-offset-1;j++)
            {
                nums[offset][j] = a;
                a++;
            }

            //第二条边
            for(int i= offset;i < n-offset-1;i++)
            {
                nums[i][n-offset] = a;
                a++;
            }


            //第三条边
            for(int j = n-offset-1;j > 0;j--)
            {
                nums[n-offset][j] = a;
                a++;
            }

            //第四条边
            for(int i = n-offset-1;i>0;i--)
            {
                nums[i][offset] = a;
                a++;
            }
            offset++;

        }

        //n是奇数。则最中间的值循环不到,要单独赋值
        if(n%2 == 1)
        {
            int b = n/2;
            nums[b][b] = n*n;
        }


        return nums;


    }
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值