回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>所以我想解决一个问题,这个问题让你比较9x9数独网格中的数字,看看数独游戏是否有一个有效的/可解的数字网格(这意味着数独规则适用于给定的网格)。我基本上解决了这个问题,但最后一部分我还没搞定。我已经知道如何对每一列/每行上的每个元素求和,但我无法完全解决这个问题,直到我能够真正检查每个3x3网格,看看其中是否有重复的数字。这就是我陷入困境的地方,因为我似乎无法得到正确的算法来以3x3的方式迭代矩阵。在</p>
<p>我试图通过使用一系列for循环来完全控制迭代,这些循环增加了特定的索引数,使其沿着矩阵移动。告诉我我做错了什么——或者是否有其他可能的、更优雅的方法来解决这个问题(使用如此多的for循环会使我的代码看起来又长又丑/效率低下)。在</p>
<pre><code>def sudoku(grid):
grid = [[1,3,2,5,4,6,9,8,7],
[4,6,5,8,7,9,3,2,1],
[7,9,8,2,1,3,6,5,4],
[9,2,1,4,3,5,8,7,6],
[3,5,4,7,6,8,2,1,9],
[6,8,7,1,9,2,5,4,3],
[5,7,6,9,8,1,4,3,2],
[2,4,3,6,5,7,1,9,8],
[8,1,9,3,2,4,7,6,5]]
duplicate = set()
numHolder = 0
for a in range(0,9):
for b in range(0,9):
numHolder+=grid[b][a]
if numHolder!=45:
return False
numHolder=0
for b in range(0,9):
for x in range(0, 9):
numHolder += grid[b][x]
if numHolder != 45:
return False
numHolder = 0
for b in range(0,3):
for c in range(0,3):
if grid[b][c] in duplicate:
return False
else:
duplicate.add(grid[b][c])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d][c+3] in duplicate:
return False
else:
duplicate.add(grid[d][c+3])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[b][c+6] in duplicate:
return False
else:
duplicate.add(grid[d][c+6])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+3][c] in duplicate:
return False
else:
duplicate.add(grid[d+3][c])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+3][c+3] in duplicate:
return False
else:
duplicate.add(grid[d+3][c+3])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+3][c+6] in duplicate:
return False
else:
duplicate.add(grid[d+3][c+6])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+6][c] in duplicate:
return False
else:
duplicate.add(grid[d+6][c])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+6][c+3] in duplicate:
return False
else:
duplicate.add(grid[d+6][c+3])
duplicate.clear()
for d in range(0,3):
for e in range(0,3):
if grid[d+6][c+6] in duplicate:
return False
else:
duplicate.add(grid[d+6][c+6])
return True
</code></pre>