0036.有效的数独

方法一:遍历

因为数独大小固定为 $O(9 \times 9)$,故时间复杂度 $O(1)$,空间复杂度 $O(1)$,均为常数级。

func isValidSudoku(board [][]byte) bool {
	// row, col, sub 分别表示第i行、第j列、第k个 3x3 宫内是否包含数字 1~9 中的某些数字
	row, col, sub := [9][9]bool{}, [9][9]bool{}, [9][9]bool{}
	for i := 0; i < 9; i++ {
		for j := 0; j < 9; j++ {
			number := int(board[i][j] - byte('1'))
			if number < 0 || number >= 9 {
				continue
			}
			k := i/3*3 + j/3
			if row[i][number] || col[j][number] || sub[k][number] {
				return false
			}
			row[i][number], col[j][number], sub[k][number] = true, true, true
		}
	}
	return true
}