#暴力破解
# 数字 1-9 在每一行只能出现一次。
# 数字 1-9 在每一列只能出现一次。
# 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
#求每行列的个数可求不为3的情况
col = len(board[0])
row = len(board)
#判断每行有无相同的值
for i in range(row):
num_set = set() #构建集合,判断添加有无该值
for j in range(col):
if board[i][j].isnumeric()==False:
continue
elif board[i][j] not in num_set:
num_set.add(board[i][j])
else:
return False
#判断每行有无相同的值(很相似)
for i in range(col):
num_set = set() #构建集合,判断添加有无该值
for j in range(row):
if board[j][i].isnumeric()==False:
continue
elif board[j][i] not in num_set:
num_set.add(board[j][i])
else:
return False
#判断每一个粗实线有无相同的值,找规律发现为每3个一跳
for i in range(0, row, 3):
for j in range(0, col, 3):
num_set = set()
for x in range(i, i+3):
for y in range(j, j+3):
if board[x][y].isnumeric() == False:
continue
elif board[x][y] not in num_set:
num_set.add(board[x][y])
else:
return False
#其他情况返回正确
return True