力扣5:螺旋矩阵

本文介绍了一个编程问题,如何用C++实现一个名为`Solution`的类,生成一个包含1到n^2元素的按顺时针螺旋顺序排列的正方形矩阵。作者详细解释了算法步骤和关键变量的使用,适用于IT技术特别是数据结构和算法的学习者。
摘要由CSDN通过智能技术生成

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {  //定义函数generateMatrix,返回值类型为二维数组,参数为n
        vector<vector<int>> res(n,vector<int>(n,0));  //定义一个二维数组。n行n列 初始化为0
        int startx=0;   //定义起始点的行坐标
        int starty=0;   //列坐标
        int loop=n/2;   //圈数为行数除以2,因为绕一圈多两行。
        int mid=n/2;    //中间点的行、列坐标
        int count=1;    //定义计数器,后面填充数组
        int offset=1;   //定义偏移量
        int i,j;   //一定要下面的for循环之前先定义i和j,这样下面的for循环都可以共享这俩变量,在for循环里面定义的变量,只能在该for循环里面起作用。
        while(loop--)
        {

            for(j=starty;j<n-offset;j++)  //第一行,左闭右开
            {
                res[startx][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[mid][mid] = count;  //如果n是奇数,则填上最中间的一个点。
        }
        return res;

    }
};

注意:

1.螺旋的圈数由n/2得到

2.一定要在for循环外,在while循环之前,定义好i和j,因为for循环内部定义的变量,只能内部使用。

3.while循环中的四个for循环,都是左闭右开,把正方形的四个边过一遍。

4.每一层圈循环结束后,一定记得把起始点和偏移量加1.

5.注意n为奇数,再加上中间的点。

出自:代码随想录

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的屁屁桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值