题解 | #Sudoku#
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
rl.on("line", function (line) {
arr.push(line.split(" "));
});
rl.on("close", () => {
// 遍历棋盘行列,填数字,符合条件立即停止
function getRes() {
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
if (arr[i][j] !== "0") continue;
for (let k = 1; k <= 9; k++) {
if (isValid(i, j, k + "")) {
arr[i][j] = k + "";
if (getRes()) {
return true;
}
arr[i][j] = "0";
}
}
return false;
}
}
return true;
}
getRes();
for (let i = 0; i < 9; i++) {
console.log(arr[i].join(" "));
}
});
// 判断每行,每列,每个九宫格是否符合要求
function isValid(row, column, num) {
for (let i = 0; i < 9; i++) {
if (arr[i][column] === num) return false;
if (arr[row][i] === num) return false;
}
let startRow = ~~(row / 3) * 3;
let startColumn = ~~(column / 3) * 3;
for (let i = startRow; i < startRow + 3; i++) {
for (let j = startColumn; j < startColumn + 3; j++) {
if (arr[i][j] === num) return false;
}
}
return true;
}
