Js生成螺旋数组。

这段代码定义了一个名为 vetux 的函数,用于生成一个螺旋矩阵。螺旋矩阵是一种按照螺旋顺序填充数字的二维数组。以下是代码的详细解释:

函数定义

function vetux(n, m) {
  // 创建一个 m 行 n 列的二维数组,初始值为 0
  const a = new Array(m).fill(0).map(() => new Array(n).fill(0));
  let i = 0;
  let j = 0;
  let count = 1;
  let stepI = 0;
  let stepJ = 1;

  // 判断当前位置是否被阻塞
  function _is_block() {
    return !a[i + stepI] || a[i + stepI][j + stepJ] !== 0;
  }

  while (1) {
    // 填充当前位置
    a[i][j] = count++;
    // 检查是否需要改变方向
    if (_is_block()) {
      // 根据当前方向调整下一步的方向
      if (stepI === 0) {
        stepI = stepJ;
        stepJ = 0;
      } else {
        stepJ = -stepI;
        stepI = 0;
      }
      // 如果改变方向后仍然被阻塞,结束循环
      if (_is_block()) {
        break;
      }
    }
    // 移动到下一个位置
    i = i + stepI;
    j = j + stepJ;
  }
  return a;
}

console.log(vetux(5, 6));

代码解析

  1. 初始化矩阵

    • a 是一个 mn 列的二维数组,初始值为 0。

    • ij 是当前填充的位置,初始为 (0, 0)

    • count 是填充的数字,从 1 开始。

    • stepIstepJ 是移动的方向,初始为 (0, 1),表示向右移动。

  2. 方向判断函数 _is_block

    • 用于判断当前位置 (i + stepI, j + stepJ) 是否超出边界或者已经被填充。

  3. 填充循环

    • 每次循环填充当前位置 (i, j)

    • 检查是否需要改变方向:

      • 如果当前方向被阻塞(_is_block 返回 true),则调整方向。

      • 如果调整方向后仍然被阻塞,结束循环。

    • 移动到下一个位置。

  4. 返回结果

    • 返回填充好的螺旋矩阵。

示例输出

调用 vetux(5, 6) 会生成一个 5 行 6 列的螺旋矩阵。以下是输出结果:

[
  [1, 2, 3, 4, 5, 6],
  [20, 21, 22, 23, 24, 7],
  [19, 32, 33, 34, 25, 8],
  [18, 31, 36, 35, 26, 9],
  [17, 16, 15, 14, 13, 10],
  [18, 19, 20, 21, 22, 11]
]

这个矩阵按照螺旋顺序填充数字,从左上角开始,向右、向下、向左、向上依次填充,直到填满整个矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值