funcdfs(board [][]byte, i int, j int)bool { m := 9 n := 9 if i == m { returntrue } if j == n { return dfs(board, i+1, 0) } if board[i][j] != '.' { return dfs(board, i, j+1) } for ch := byte('1'); ch <= '9'; ch++ { if !isValidSudoku(board, i, j, ch) { continue } //做选择 board[i][j] = ch if dfs(board, i, j+1) { returntrue } //撤销选择 board[i][j] = '.' } returnfalse }
funcisValidSudoku(board [][]byte, r int, c int, n byte)bool { for i := 0; i < 9; i++ { //判断行是否存在重复 if board[r][i] == n { returnfalse } //判断列是否存在重复 if board[i][c] == n { returnfalse } //判断3*3方框是否存在重复 if board[(r/3)*3+i/3][(c/3)*3+i%3] == n { returnfalse } } returntrue }