package main
import "fmt"
/*
有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
说明:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 '.' 。
给定数独永远是 9x9 形式的。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2f9gg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/
func main() {
board := [][]byte{
{'5', '3', '.', '.', '7', '.', '.', '.', '.'},
{'6', '.', '.', '1', '9', '5', '.', '.', '.'},
{'.', '9', '8', '.', '.', '.', '.', '6', '.'},
{'8', '.', '.', '.', '6', '.', '.', '.', '3'},
{'4', '.', '.', '8', '.', '3', '.', '.', '1'},
{'7', '.', '.', '.', '2', '.', '.', '.', '6'},
{'.', '6', '.', '.', '.', '.', '2', '8', '.'},
{'.', '.', '.', '4', '1', '9', '.', '.', '5'},
{'.', '.', '.', '.', '8', '.', '.', '7', '9'},
}
sudoku := isValidSudoku(board)
fmt.Println(sudoku)
}
func isValidSudoku(board [][]byte) bool {
for i := 0; i < 9; i++ {
m1 := make(map[byte]bool)
m2 := make(map[byte]bool)
m3 := make(map[byte]bool)
fmt.Printf("i: %d, num[i]: %v\n", i, board[i])
// 判断每一行是否重复
for j := 0; j < 9; j++ {
if board[i][j] != '.' {
fmt.Printf("j1: %d, num[j]: %v\n", j, board[i][j])
if m1[board[i][j]] {
return false
}
m1[board[i][j]] = true
}
// 判断每一列是否重复
if board[j][i] != '.' {
fmt.Printf("j2: %d, num[j]: %v\n", j, board[j][i])
if m2[board[j][i]] {
return false
}
m2[board[j][i]] = true
}
// 判断9宫格内的数据是否重复
row := (i%3)*3 + j%3
col := (i/3)*3 + j/3
if board[row][col] != '.' {
fmt.Printf("j3: %d, num[j]: %v\n", j, board[row][col])
if m3[board[row][col]] {
return false
}
m3[board[row][col]] = true
}
}
}
return true
}
Output:
➜ 01-数组 git:(master) ✗ go run 10-有效的数独.go
i: 0, num[i]: [53 51 46 46 55 46 46 46 46]
j1: 0, num[j]: 53
j2: 0, num[j]: 53
j3: 0, num[j]: 53
j1: 1, num[j]: 51
j2: 1, num[j]: 54
j3: 1, num[j]: 54
j2: 3, num[j]: 56
j3: 3, num[j]: 51
j1: 4, num[j]: 55
j2: 4, num[j]: 52
j2: 5, num[j]: 55
j3: 5, num[j]: 57
j3: 8, num[j]: 56
i: 1, num[i]: [54 46 46 49 57 53 46 46 46]
j1: 0, num[j]: 54
j2: 0, num[j]: 51
j3: 0, num[j]: 56
j3: 1, num[j]: 52
j2: 2, num[j]: 57
j3: 2, num[j]: 55
j1: 3, num[j]: 49
j1: 4, num[j]: 57
j1: 5, num[j]: 53
j2: 6, num[j]: 54
i: 2, num[i]: [46 57 56 46 46 46 46 54 46]
j1: 1, num[j]: 57
j1: 2, num[j]: 56
j2: 2, num[j]: 56
j3: 3, num[j]: 54
j1: 7, num[j]: 54
i: 3, num[i]: [56 46 46 46 54 46 46 46 51]
j1: 0, num[j]: 56
j2: 1, num[j]: 49
j3: 1, num[j]: 49
j3: 3, num[j]: 55
j1: 4, num[j]: 54
j2: 4, num[j]: 56
j3: 4, num[j]: 57
j2: 7, num[j]: 52
j3: 7, num[j]: 53
j1: 8, num[j]: 51
i: 4, num[i]: [52 46 46 56 46 51 46 46 49]
j1: 0, num[j]: 52
j2: 0, num[j]: 55
j2: 1, num[j]: 57
j3: 1, num[j]: 56
j1: 3, num[j]: 56
j2: 3, num[j]: 54
j3: 3, num[j]: 54
j1: 5, num[j]: 51
j2: 5, num[j]: 50
j3: 5, num[j]: 50
j2: 7, num[j]: 49
j3: 7, num[j]: 51
j1: 8, num[j]: 49
j2: 8, num[j]: 56
i: 5, num[i]: [55 46 46 46 50 46 46 46 54]
j1: 0, num[j]: 55
j2: 1, num[j]: 53
j3: 1, num[j]: 52
j1: 4, num[j]: 50
j2: 4, num[j]: 51
j3: 4, num[j]: 49
j3: 5, num[j]: 56
j2: 7, num[j]: 57
j3: 7, num[j]: 57
j1: 8, num[j]: 54
i: 6, num[i]: [46 54 46 46 46 46 50 56 46]
j1: 1, num[j]: 54
j3: 5, num[j]: 54
j1: 6, num[j]: 50
j2: 6, num[j]: 50
j1: 7, num[j]: 56
i: 7, num[i]: [46 46 46 52 49 57 46 46 53]
j2: 2, num[j]: 54
j1: 3, num[j]: 52
j1: 4, num[j]: 49
j1: 5, num[j]: 57
j2: 6, num[j]: 56
j3: 6, num[j]: 51
j3: 7, num[j]: 49
j1: 8, num[j]: 53
j2: 8, num[j]: 55
j3: 8, num[j]: 54
i: 8, num[i]: [46 46 46 46 56 46 46 55 57]
j3: 0, num[j]: 50
j2: 3, num[j]: 51
j3: 3, num[j]: 56
j1: 4, num[j]: 56
j2: 4, num[j]: 49
j2: 5, num[j]: 54
j3: 5, num[j]: 55
j1: 7, num[j]: 55
j2: 7, num[j]: 53
j3: 7, num[j]: 53
j1: 8, num[j]: 57
j2: 8, num[j]: 57
j3: 8, num[j]: 57
true