一次遍历:
- 建立二维数组rows,cols,用来记录每一行,每一列的数字是否符合要求
- 建立三维数组rcs用来记录每个九宫格中的数字是否符合要求
- 两层for,拿到的行列(i,j),可以一次性的将建立的三个数组都进行更新,更新完同时再判断一下就可以了
func isValidSudoku(board [][]byte) bool {
var rows, cols [9][9]int
var rcs [3][3][9]int
for i, row := range board{
for j, c := range row {
if c == '.'{
continue
}
t := c - '1'
rows[i][t]++
cols[j][t]++
rcs[i/3][j/3][t]++
if rows[i][t] > 1 || cols[j][t] > 1 || rcs[i/3][j/3][t] > 1 {
return false
}
}
}
return true
}