36. Valid Sudoku (Medium) - TengnanYao/daily_leetcode GitHub Wiki
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
h = {}
for i in range(9):
for j in range(9):
k = board[i][j]
if k != ".":
k1, k2, k3 = (i, k), (k, j), (i // 3, j // 3, k)
if k1 in h or k2 in h or k3 in h:
return False
h[k1] = 1
h[k2] = 1
h[k3] = 1
return True
# my original solution
zipboard = zip(*board)
blocks = [[] for i in range(9)]
for i in range(9):
for j in range(9):
k = i // 3 * 3 + j // 3
blocks[k].append(board[i][j])
for i in range(9):
row, col, block = [], [], []
for j in range(9):
r, c, b = board[i][j], zipboard[i][j], blocks[i][j]
if r in row or c in col or b in block:
return False
if r != ".":
row.append(r)
if c != ".":
col.append(c)
if b != ".":
block.append(b)
return True