题目描述
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
解题代码
只会暴力解法
func isValidSudoku(board [][]byte) bool { // 确定1~9是否只出现一次 var b = make([]bool,9) for _, bytes := range board { for i2, b2 := range bytes { if b2 != byte('.') { atoi, _ := strconv.Atoi(string(b2)) if !b[atoi-1] { b[atoi-1] = true } else { return false } } if i2 == 8 { b = make([]bool,9) } } } // 列 for i := 0; i < 9; i++ { for j := 0; j < 9; j++ { if board[j][i] != byte('.') { atoi, _ := strconv.Atoi(string(board[j][i])) if !b[atoi - 1] { b[atoi - 1] = true } else { return false } } if j == 8 { b = make([]bool,9) } } } // 3*3 单元格 x := 0 y := 0 for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { if board[i + x*3][j + y*3] != byte('.') { atoi, _ := strconv.Atoi(string(board[i + x*3][j + y*3])) fmt.Println(atoi) if !b[atoi - 1] { b[atoi - 1] = true } else { return false } } if i + 3*j == 8 { b = make([]bool,9) } } if i == 2 { y ++ i = -1 } if y == 3 { y = 0 x ++ } if x == 3 { break } } return true }
提交结果