Javascript 复杂螺旋矩阵

Javascript 复杂螺旋矩阵,javascript,algorithm,Javascript,Algorithm,我正在为我的谷歌面试进行培训,我试图理解在我观看的视频中出现的这个解决方案。如果有人能解释一下这里发生了什么,我将不胜感激 问题是: 编写一个接受整数N并返回NxN螺旋矩阵的函数 示例: matrix(2) [ [1, 2], [4, 3] ] matrix(3) [ [1, 2, 3], [8, 9, 4], [7, 6, 5] ] matrix(4) [ [1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [

我正在为我的谷歌面试进行培训,我试图理解在我观看的视频中出现的这个解决方案。如果有人能解释一下这里发生了什么,我将不胜感激

问题是: 编写一个接受整数N并返回NxN螺旋矩阵的函数

示例:

matrix(2)
[
  [1, 2],
  [4, 3]
]

matrix(3)
[
  [1, 2, 3],
  [8, 9, 4],
  [7, 6, 5]
]

matrix(4)
[
  [1, 2, 3, 4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10, 9, 8, 7]
]
代码:


实施情况如下:

结果是一个包含n个数组的数组,它将在while循环中填充

计数器统计访问的矩阵单元数

startColumn、endColumn、startRow、endRow定义访问矩阵单元格时逐渐缩小的矩形的边界。例如,当完全访问第一行时,startRow将递增,因此第一行不再成为矩形的一部分

而条件意味着矩形边界不必满足。在相反的情况下,矩形将有0个曲面,因此矩阵将只访问单元,因此它将被终止

第一个for循环意味着擦拭矩形的上边框;每次访问新单元格时,将计数器指定为单元格的值并递增

第二个、第三个和第四个循环表示相同的内容,但用于右、下和左边框


你到底不明白什么?视频是什么?欢迎来到StackOverflow。请按照创建此帐户时的建议,遵循帮助文档中的过帐指导原则,和在这里申请。StackOverflow不是设计、编码、研究或教程资源。如果你有一个具体的困惑点,那么解释一下。一个我不理解的全局变量对于堆栈溢出来说太宽了。
function matrix(n) {
  const results = [];

  for (let i = 0; i < n; i++) {
    results.push([]);
  }

  let counter = 1;
  let startColumn = 0;
  let endColumn = n - 1;
  let startRow = 0;
  let endRow = n - 1;
  while (startColumn <= endColumn && startRow <= endRow) {
    // Top row
    for (let i = startColumn; i <= endColumn; i++) {
      results[startRow][i] = counter;
      counter++;
    }
    startRow++;

    // Right column
    for (let i = startRow; i <= endRow; i++) {
      results[i][endColumn] = counter;
      counter++;
    }
    endColumn--;

    // Bottom row
    for (let i = endColumn; i >= startColumn; i--) {
      results[endRow][i] = counter;
      counter++;
    }
    endRow--;

    // start column
    for (let i = endRow; i >= startRow; i--) {
      results[i][startColumn] = counter;
      counter++;
    }
    startColumn++;
  }

  return results;
}