var fun = function(board) {
// 判断是否满足条件
function check(x, y, n) {
for(let i = 0;i < 9;i++) {
if(board[x][i] == n || board[i][y] == n) {
return false
}
}
let xi = x - x % 3 //九宫格判断
let yj = y - y % 3
for(let i = xi;i < xi + 3;i++) {
for(let j = yj;j < yj + 3;j++) {
if(board[i][j] == n)
return false
}
}
return true
}
function dg(x, y) {
if(board[x][y] !== '.') { // 不可修改项
y++
if(y > 8) {
y = 0
x++
}
if(x > 8) {
return true // 数独填完
} else {
return dg(x,y)
}
} else {
for(let i = 1;i <= 9;i++) {
if(check(x, y, ''+i)) {
board[x][y] = i + ''
y++
if(y > 8) { // 换行
y = 0
x++
}
if(x > 8) {
return true // 数独填完
} else {
if(!dg(x,y)) {
y-- 、、回退一格
if(y < 0) { // 回退至上一格
x--
y = 8
}
if(x < 0) {
return true
}
board[x][y] = '.' // 清除状态
} else {
return true // 数独已填完,正在结束递归
}
}
}
}
return false // 回退,重新填数据
}
}
dg(0,0)
return board
}
console.log(fun([
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
))