判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。
def isValidSudoku(board):
"""
:type board: List[List[str]]
:rtype: bool
"""
Row, Col, Grid = [''] * 9, [''] * 9, [''] * 9
for r_index, row in enumerate(board):
for c_index, ch in enumerate(row):
g_index = r_index // 3 * 3 + c_index // 3
if ch != '.':
if ch in Row[r_index] or ch in Col[c_index] or ch in Grid[g_index]:
return False
Row[r_index] += ch
Col[c_index] += ch
Grid[g_index] += ch
return True
方案二:按列 行 3*3宫,分别检测
def isValidSudoku(board):
"""
:type board: List[List[str]]
:rtype: bool
"""
for row in board:
res = []
for ch in row:
if ch in res:
return False
if ch != '.':
res.append(ch)
for i in range(9):
res = []
for j in range(9):
ch = board[j][i]
if ch in res:
return False
if ch != '.':
res.append(ch)
for i in range(0, 9, 3):
for j in range(0, 9, 3):
res = []
grid = [board[i][j] for i in range(i, i + 3) for j in range(j, j + 3)]
for ch in grid:
if ch in res:
return False
if ch != '.':
res.append(ch)
return True