36. Valid Sudoku - cocoder39/coco39_LC GitHub Wiki
36. Valid Sudoku
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
row_set = [set() for i in range(9)]
col_set = [set() for i in range(9)]
box_set = [set() for i in range(9)]
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] != '.':
if board[i][j] in row_set[i]:
return False
row_set[i].add(board[i][j])
if board[i][j] in col_set[j]:
return False
col_set[j].add(board[i][j])
box_id = i // 3 * 3 + j // 3
if board[i][j] in box_set[box_id]:
return False
box_set[box_id].add(board[i][j])
return True
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
m, n = len(board), len(board[0])
for i in range(m):
for j in range(n):
if board[i][j] == '.':
if not self.isValid(board, i, j):
return False
return True
def isValid(self, board, row, col) -> bool:
# row check
counter = [0 for _ in range(9)]
for i in range(9):
val = board[row][i]
if val != '.':
idx = ord(val) - ord('1')
counter[idx] += 1
if counter[idx] > 1:
return False
counter = [0 for _ in range(9)]
for i in range(9):
val = board[i][col]
if val != '.':
idx = ord(val) - ord('1')
counter[idx] += 1
if counter[idx] > 1:
return False
counter = [0 for _ in range(9)]
r, c = row//3*3, col//3*3
for i in range(r, r+3):
for j in range(c, c+3):
val = board[i][j]
if val != '.':
idx = ord(val) - ord('1')
counter[idx] += 1
if counter[idx] > 1:
return False
return True