算法题每日一练---第65天:螺旋矩阵 II

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、问题描述

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

题目链接:螺旋矩阵 II

二、题目要求

样例 1

输入: n = 3
输出: [[1,2,3],[8,9,4],[7,6,5]]
复制代码

样例 2

输入: n = 1
输出: [[1]]
复制代码

考察

1.模拟计算
2.建议用时15~35min
复制代码

三、问题分析

这一题和算法题每日一练---第64天:螺旋矩阵 I 本质上是一样的。

只不过是第一道题目给你数组,让你输出。第二道题目给你范围,让你输出数组。建议大家先做 螺旋矩阵 I 题目(讲解比较详细),回来再做这一题巩固一下相关的知识。

四、编码实现

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int k=1,i,u=0,d=n-1,l=0,r=n-1;//初始化数据,定义上下左右四个方向范围
        vector<vector<int>>v(n, vector<int>(n));//定义二维数组
        while(1)//循环判断
        {
            for(i=l;i<=r;i++) v[u][i]=k++;//l->r方向
            if(++u>d) break;
            for(i=u;i<=d;i++) v[i][r]=k++;//u->d方向
            if(--r<l) break;
            for(i=r;i>=l;i--) v[d][i]=k++;//r->方向
            if(--d<u) break;
            for(i=d;i>=u;i--) v[i][l]=k++;//d->u方向
            if(++l>r) break;
        }
        return v;

    }
};
复制代码

五、测试结果

4.png

5.png

猜你喜欢

转载自juejin.im/post/7080686157725433892