首页 > 解决方案 > 为什么 [] 和 new Array 之间有区别

问题描述

我正在查看流行的 NQueen 问题。下面的代码只是返回可能的方式的数量。它根据板矩阵的传递方式提供不同的输出。

// just a helper function
const isSafe = (board, row, col) => {
  for (let i = row; i >= 0; i--) {
    if (board[i][col]) return false;
  }
  for (let i = row, j = col; i >= 0 && j >= 0; i--, j--) {
    if (board[i][j]) return false;
  }
  for (let i = row, j = col; i >= 0 && j < board.length; i--, j++) {
    if (board[i][j]) return false;
  }
  for (let i = row; i >= 0; i--) {
    if (board[i][col]) return false;
  }
  return true;
};

const getWays = (board, row) => {
  if (row == board.length) {
    return 1;
  }

  let count = 0;
  for (let col = 0; col < board.length; col++) {
    if (isSafe(board, row, col)) {
      board[row][col] = true;
      count += getWays(board, row + 1);
      board[row][col] = false;
    }
  }
  return count;
};

如果我getWays像下面这样调用输出是 2 这是正确的

const n = 4;
let board = new Array(n).fill(new Array(n).fill(false));
for (let i = 0; i < n; i++) {
  board[i] = new Array(n).fill(false);
}
console.log(getWays(board, 0));

但如果我getWays像下面这样打电话,答案是 0,这是不正确的

const n = 4;
let board = new Array(n).fill(new Array(n).fill(false));
console.log(getWays(board, 0));

我不明白这两种创建矩阵的方法如何导致不同的输出,即使它们生成相同的矩阵。有人可以通过一些解释来指出我缺少什么并链接到任何文档(如果适用/可能)

标签: javascriptarrays

解决方案



推荐阅读