【js刷题:数据结构数组篇之螺旋矩阵】

一、是什么

螺旋矩阵是指在矩阵中按照螺旋顺序依次访问矩阵中的元素的一种方式。通常,螺旋矩阵是按照从外到内,由外向内逐层访问矩阵元素,形成一条螺旋的路径。这种方式通常用于对矩阵进行遍历或者按照特定顺序访问矩阵中的元素。
例如,对于一个 4x4 的矩阵:

1  2  3  4
5  6  7  8
9 10 11 12
13 14 15 16

按照螺旋顺序访问的结果为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10。

二、题目

在这里插入图片描述

三、思路

模拟顺时针画矩阵的过程:
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
画的是要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

四、代码

var generateMatrix = function(n) {
    let startX = startY = 0;   // 起始位置
    let loop = Math.floor(n/2);   // 旋转圈数
    let mid = Math.floor(n/2);    // 中间位置
    let offset = 1;    // 控制每一层填充元素个数
    let count = 1;     // 更新填充数字
    let res = new Array(n).fill(0).map(() => new Array(n).fill(0));

    while (loop--) {
        let row = startX, col = startY;
        // 上行从左到右(左闭右开)
        for (; col < n - offset; col++) {
            res[row][col] = count++;
        }
        // 右列从上到下(左闭右开)
        for (; row < n - offset; row++) {
            res[row][col] = count++;
        }
        // 下行从右到左(左闭右开)
        for (; col > startY; col--) {
            res[row][col] = count++;
        }
        // 左列做下到上(左闭右开)
        for (; row > startX; row--) {
            res[row][col] = count++;
        }

        // 更新起始位置
        startX++;
        startY++;

        // 更新offset
        offset += 1;
    }
    // 如果n为奇数的话,需要单独给矩阵最中间的位置赋值
    if (n % 2 === 1) {
        res[mid][mid] = count;
    }
    return res;
};

在这里插入图片描述
更多矩阵例题持续更新中,关注不迷路

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 16:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 16:04:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 16:04:03       82 阅读
  4. Python语言-面向对象

    2024-03-31 16:04:03       91 阅读

热门阅读

  1. 洛谷P1000超级玛丽游戏C++

    2024-03-31 16:04:03       38 阅读
  2. Stable Diffusion 推荐硬件配置和本地化布署

    2024-03-31 16:04:03       41 阅读
  3. 【shell】shell实现等待用户输入

    2024-03-31 16:04:03       30 阅读
  4. 【华为OD机试C++】进制转换

    2024-03-31 16:04:03       34 阅读
  5. [单调队列] 滑动窗口

    2024-03-31 16:04:03       32 阅读
  6. 一文总结vue和react的区别

    2024-03-31 16:04:03       30 阅读
  7. zookeeper命令详解1

    2024-03-31 16:04:03       38 阅读
  8. Zookeeper中的ACL 权限控制机制

    2024-03-31 16:04:03       35 阅读