javascript - 如何在javascript中生成螺旋矩阵?

标签 javascript algorithm

我正在尝试在 javascript 中生成螺旋矩阵。
问题
给定一个整数 A,生成一个以螺旋顺序填充从 1 到 A^2 的元素的方阵。
输入 : 3

 [   [ 1, 2, 3 ],
     [ 8, 9, 4 ],
     [ 7, 6, 5 ]   ]
input is 4
 [   [1, 2, 3, 4],
     [12, 13, 14, 5],
     [11, 16, 15, 6],
     [10, 9, 8, 7]   ]
我的方法是创建 2d带有 0 的数组值,然后它们将填充值。

let generateMatrix = function(A) {
  let arr = [], counter = 1;
  for (let i = 0; i < A; i++) {
    let items = []
    for (let j = 0; j < A; j++) {
      items.push(0)
    }
    arr.push(items)
  }

  var spiralMatrix = function(arr) {
    if (arr.length > 1) {
      for (let i = 0; i < arr[0].length; i++) {
        arr[0][i] = counter++;
      }
    }
    return arr
  }
  return spiralMatrix(arr)
}
console.log(generateMatrix(2))

最佳答案

您可以对每个边进行循环并循环,直到没有更多可用范围。

function spiral(length) {
    var upper = 0,
        lower = length - 1,
        left = 0,
        right = length - 1,
        i = 0,
        j = 0,
        result = Array.from({ length }, _ => []),
        value = 1;

    while (true) {
        if (upper++ > lower) break;

        for (; j < right; j++) result[i][j] = value++;
        if (right-- < left) break;

        for (; i < lower; i++) result[i][j] = value++;

        if (lower-- < upper) break;

        for (; j > left; j--) result[i][j] = value++;
        if (left++ > right) break;

        for (; i > upper; i--) result[i][j] = value++;
    }

    result[i][j] = value++;
    return result;
}

var target = document.getElementById('out'),
    i = 10;

while (--i) target.innerHTML += spiral(i).map(a => a.map(v => v.toString().padStart(2)).join(' ')).join('\n') + '\n\n';
<pre id="out"></pre>

关于javascript - 如何在javascript中生成螺旋矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60760781/

相关文章:

javascript - 如何更改复选框遵循 JSON 字符串?

javascript - 如何将 "to"字段(在电子邮件 header 中)设置为群组电子邮件地址?

python - 找出出现奇数次的字母

arrays - 数组中数组的排序算法时间复杂度?

javascript - 在响应式网格站点中拥有全屏宽度背景

javascript - 如何在函数作用域外与buzz.sound函数交互?

algorithm - 给定一个唯一正整数数组,为每个元素找到最近的较小元素,但距离至少为 k

c++ - 处理错误 C++

java - 如何证明没有区间重叠?

javascript - Jquery移动功能不起作用==页面刷新?