javascript - 为什么 [] 和 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));
我不明白这两种创建矩阵的方法如何导致不同的输出,即使它们生成相同的矩阵。有人可以通过一些解释来指出我缺少什么并链接到任何文档(如果适用/可能)
解决方案
推荐阅读
- swift - ForEach 快速循环不同的变量类型
- javascript - Firebase 云功能 - 如何解决此错误:ECONNRESET
- r - 在闪亮的应用程序中更改选项卡面板中的下载按钮位置
- sql - 在 SQL 中计算过去 7 天的发生次数
- android - 如何在列表视图的每个项目上加载 json 数据并显示在 android 的另一个活动中获取的数据?
- c# - C# WPF:使用 Storyboard 和 EventTrigger 切换边距值
- android - Motionlayout:警告找不到视图 ID -1
- javascript - 将输入动态添加到动态表单
- python - Python/pandas 导出到 excel 转换的数据时间 (HH:mm)
- java - 用 lambda 替换 if-else 方法