为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 问题数组数独 - grid[i][j][0]

Golang 问题数组数独 - grid[i][j][0]

Go
海绵宝宝撒 2022-05-23 17:01:53
我对此代码有疑问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',并带有一个特殊值 '.' 这是一个相当奇怪的表示,但它是代码所暗示的。


查看完整回答
反对 回复 2022-05-23
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

看起来它是一个哈希图的模拟。49 是 character 的 ASCII 字符值1,因此如果一个单元格有 value 1cell-49将给出 0,如果单元格有2cell-49将给出 1 等。并且seenSub数组会跟踪看到了哪些数字。如果seenSub[i]true,则该数字i+1已被看到。



查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号