有效的数独

41 阅读1分钟

image.png

一次遍历:

  1. 建立二维数组rows,cols,用来记录每一行,每一列的数字是否符合要求
  2. 建立三维数组rcs用来记录每个九宫格中的数字是否符合要求
  3. 两层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
}