1 回答
TA贡献1891条经验 获得超3个赞
如果您在函数内使用 for 循环,var
将创建一个局部变量,“no var”将查找作用域链,直到找到该变量或到达全局作用域。这意味着您需要var
在 for 循环内创建变量时声明 ,以避免一个循环与另一个循环混淆。
所以你的代码应该是这样的:
function possible(board, y, x, n) {
for (var i = 0; i < 9; i++) {
if (board[y][i] === n) {
return false;
}
if (board[i][x] === n) {
return false;
}
}
y0 = Math.floor(y / 3) * 3;
x0 = Math.floor(x / 3) * 3;
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (board[y0+i][x0+j] === n) {
return false;
}
}
}
return true;
}
function solver(board) {
for (var y = 0; y < 9; y++) {
for (var x = 0; x < 9; x++) {
if (board[y][x] === 0) {
for (var n = 1; n < 10; n++) {
if (possible(board, y, x, n)) {
board[y][x] = n;
solver(board);
board[y][x] = 0;
}
}
return
}
}
}
console.log(board);
}
添加回答
举报