力扣链接:https://leetcode-cn.com/probl...
解题思路:
- 这道题的解法是朴素遍历
- 首先遍历每一行是否有重复
- 其次遍历每一列是否有重复
- 遍历33的格子是否有重复
func isValidSudoku(board [][]byte) bool {
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[i]); j++ {
if i % 3 == 0 && j % 3 == 0 && !isValidSquare(board, i, j) {
return false
}
if !isValidXY(board, i, j) {
return false
}
}
}
return true
}
func isValidSquare(board [][]byte, x, y int) bool {
m := map[byte]bool{}
for i := x; i < x + 3; i++ {
for j := y; j < y + 3; j++ {
if board[i][j] == '.' {
continue
}
if m[board[i][j]] {
return false
}
m[board[i][j]] = true
}
}
return true
}
func isValidXY(board [][]byte, x, y int) bool {
mx := make(map[byte]bool)
for i := 0; i < 9; i++ {
if board[x][i] == '.' {
continue
}
if mx[board[x][i]] {
return false
}
mx[board[x][i]] = true
}
my := make(map[byte]bool)
for j := 0; j < 9; j++ {
if board[j][y] == '.' {
continue
}
if my[board[j][y]] {
return false
}
my[board[j][y]] = true
}
return true
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。