我對此代碼有疑問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 關注
- 156 瀏覽
添加回答
舉報
0/150
提交
取消