题目:
原题链接: https://leetcode-cn.com/problems/valid-sudoku/
解题思路:
按照行、列、块建立hash表
在遍历的过程中,同时检索3个表
如果在某个表中查找到当前数字,则不符合数独要求
如果没查找到,则更新3个表数据,继续遍历
块编号的计算方式为: 行号 / 3 + 列号 / 3 (所有计算均做取整操作)
代码实现:
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
rec = {'row' : {0 : [], 1 : [], 2 : [], 3 : [], 4 : [], 5 : [], 6 : [], 7 : [], 8 : [], 9 : []},\
'column' : {0 : [], 1 : [], 2 : [], 3 : [], 4 : [], 5 : [], 6 : [], 7 : [], 8 : [], 9 : []},\
'rect' : {0 : [], 1 : [], 2 : [], 3 : [], 4 : [], 5 : [], 6 : [], 7 : [], 8 : [], 9 : []}}
for row in range(0, 9):
for column in range(0, 9):
rect_num = row // 3 * 3 + column // 3
if board[row][column] == '.':
continuecurr_num = int(board[row][column])
if curr_num in rec['row'][row]:
return False
elif curr_num in rec['column'][column]:
return False
elif curr_num in rec['rect'][rect_num]:
return False
rec['row'][row].append(curr_num)
rec['column'][column].append(curr_num)
rec['rect'][rect_num].append(curr_num)
return True