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

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

}


海绵宝宝撒
浏览 167回答 2
2回答

冉冉说

seenRow[grid[i][j][0]&nbsp;-&nbsp;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',并带有一个特殊值 '.'&nbsp;这是一个相当奇怪的表示,但它是代码所暗示的。

宝慕林4294392

看起来它是一个哈希图的模拟。49 是 character 的 ASCII 字符值1,因此如果一个单元格有 value&nbsp;1,cell-49将给出 0,如果单元格有2,cell-49将给出 1 等。并且seenSub数组会跟踪看到了哪些数字。如果seenSub[i]是true,则该数字i+1已被看到。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go