var solveSudoku = function (board) {
for (let row = 0; row < 9; row++) {
for (let col = 0; col < 9; col++) {
if (board[row][col] !== '.') continue
for (let num = 1; num < 10; num++) {
const isSet = cheackSet(row, col, board, num + '')
if (!isSet) continue
board[row][col] = num + ''
// 判断是否能继续进行
if (solveSudoku(board)) return true
// 回退
board[row][col] = '.'
}
// 当前格子没有不符合的,则回退
return false
}
}
return true
};
// 检查是否满足题意
function cheackSet(row, col, board, num) {
for (let i = 0; i < 9; i++) {
if (board[i][col] === num || board[row][i] === num) {
return false
}
}
return checkIn33(row, col, board, num)
}
function checkIn33(row, col, board, num) {
const x = Math.floor(row / 3) * 3
const y = Math.floor(col / 3) * 3
for (let i = x; i < x + 3; i++) {
for (let j = y; j < y + 3; j++) {
if (board[i][j] === num) {
return false
}
}
}
return true
}