解题思路:按行,列,3*3方格读取元素,存入字典中。若字典中该元素的值大于1,则返回false,否则返回true。
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
rows = [{} for i in range(9)]
column = [{} for i in range(9)]
box = [{} for i in range(9)]
for i in range(9):
for j in range(9):
# 读取元素
nums = board[i][j]
# 计算3*3方格的下标
index = (i //3) *3 + j//3
if nums!='.':
# 字典的get() 如果nums元素没有,则生成并赋值为0,然后对值加1
rows[i][nums] = rows[i].get(nums,0)+1
column[j][nums] = column[j].get(nums,0)+1
box[index][nums] = box[index].get(nums,0)+1
if rows[i][nums]>1 or column[j][nums]>1 or box[index][nums]>1:
return False
return True
难点:
1. 用字典的值的方法来判断元素是否出现两次
2.3*3方格的下标判断:当i<3时, j//3 决定是第几个方格;当i>3时,(i //3 )*3 + j//3 共同决定是第几个方格。