[嗨,我对此seenRow[grid[i][j][0] - 49]
的确切代码有疑问。这是什么?
func sudoku2(grid [][]string) bool {
for i := 0; i < 9; i++ {
var seenRow [9]bool
var seenCol [9]bool
var seenSub [9]bool
for j := 0; j < 9; j++ {
if grid[i][j] != "." {
if seenRow[grid[i][j][0] - 49] {
return false
}
seenRow[grid[i][j][0] - 49] = true
}
if grid[j][i] != "." {
if seenCol[grid[j][i][0] - 49] {
return false
}
seenCol[grid[j][i][0] - 49] = true
}
x := i%3*3 + j%3
y := i/3*3 + j/3
if grid[y][x] != "." {
if seenSub[grid[y][x][0] - 49] {
return false
}
seenSub[grid[y][x][0] - 49] = true
}
}
}
return true
}
seenRow[grid[i][j][0] - 49]
seenRow
是string
的切片,因此前两个索引[i][j]
。 grid[i][j]
是字符串,grid[i][j][0]
是第一个字节值的整数形式的数值。
看起来它是对hashmap的模拟。 49是字符1
的ASCII字符值,因此,如果单元格具有值1
,cell-49
将给出0,如果单元格具有2
,cell-49
将给出1,等等。并且seenSub
数组跟踪看到的数字。如果seenSub[i]
为true
,则可以看到数字i+1
。