我对此代码有疑问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}
2 回答

冉冉说
TA贡献1877条经验 获得超1个赞
seenRow[grid[i][j][0] - 49]
seenRow
是 的切片string
,因此是前两个索引[i][j]
。grid[i][j]
是一个字符串,并且grid[i][j][0]
是整数形式的第一个字节值的数值。
减法-49
和 9 元素切片seenRow
让我认为字符串的第一个字节是 49 到 57 之间的值(ascii 值 '1' 到 '9')。在这一点上,值得查看代码的其他部分以了解存储的数据grid
及其语义是什么。
如果我不得不猜测,grid
这是一个 9×9 的 Sudoko 板,其中每个值都表示为一个 1 字节的字符串,其值为 '1' 到 '9',并带有一个特殊值 '.' 这是一个相当奇怪的表示,但它是代码所暗示的。

宝慕林4294392
TA贡献2021条经验 获得超8个赞
看起来它是一个哈希图的模拟。49 是 character 的 ASCII 字符值1
,因此如果一个单元格有 value 1
,cell-49
将给出 0,如果单元格有2
,cell-49
将给出 1 等。并且seenSub
数组会跟踪看到了哪些数字。如果seenSub[i]
是true
,则该数字i+1
已被看到。
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消