题目:
请你判断一个 9 x 9
的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。(请参考示例图)
注意:
- 一个有效的数独(部分已被填充)不一定是可解的。
- 只需要根据以上规则,验证已经填入的数字是否有效即可。
- 空白格用
'.'
表示。
思路:
这个题就是一个简单的二维数组的题目,对一个9*9的数组进行遍历,创建三个数组,一个记录行的,一个记录列的,一个记录3*3的,通用的规则就是在原数组中找到一个数n,按这个数映射到我们创建的三个数组的索引n-1内去,在这个索引上进行加1的操作,每次遍历都要对三个数组进行检查,看是否有大于1的情况存在,没有的话就代表这个数独表是个有效的数独表,否则就返回false
代码
func isValidSudoku(board [][]byte) bool {
var rows, columns [9][9]int
var subboxes [3][3][9]int
for i, row := range board{
for j, c := range row{
if c == '.'{
continue
}
index := c-'1'
rows[i][index]++
columns[j][index]++
subboxes[i/3][j/3][index]++
if rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i/3][j/3][index] > 1{
return false
}
}
}
return true
}