36. Valid Sudoku

class Solution(object):
    def isValidSudoku(self, board):
        rows = collections.defaultdict(set)
        cols = collections.defaultdict(set)
        grid = collections.defaultdict(set)

        for r in range(9):
            for c in range(9):
                num = board[r][c]
                if num == ".":
                    continue
                if (num in rows[r] or
                    num in cols[c] or 
                    num in grid[r // 3, c // 3]):
                    return False
                rows[r].add(num)
                cols[c].add(num)
                grid[r // 3, c // 3].add(num)

        return True