有效的数独
思路
**方法:**哈希查表,一次遍历
有效的数独满足以下三个条件:
- 同一个数字在每一行只能出现一次;
- 创建 9 个 空列表用 row 来接收,根据遍历到的横坐标来判断存在哪个空列表里;(若该列表不存在就存起来,存在直接返回 False)
- 同一个数字在每一列只能出现一次;
- 创建 9 个 空列表用 col 来接收,根据遍历到的纵坐标来判断存在哪个空列表里;(若该列表不存在就存起来,存在直接返回 False)
- 同一个数字在每一个小九宫格只能出现一次。
- 创建一个 3x3 的盒子列表: 如下图所示。根据遍历到的[横坐标/3,纵坐标/3] 存入对应的空盒子里面;(若该列表不存在就存起来,存在直接返回 False)
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
col = [[] for _ in range(9)]
row = [[] for _ in range(9)]
box = [[[] for _ in range(3)] for _ in range(3)]
for i in range(9):
for j in range(9):
if board[j][i] == '.':
continue
if (board[j][i] in col[i]) or (board[j][i] in row[j]) or (board[j][i] in box[j//3][i//3]):
return False
col[i].append(board[j][i])
row[j].append(board[j][i])
box[j//3][i//3].append(board[j][i])
return True