-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path36. Valid Sudoku.py
More file actions
55 lines (43 loc) · 1.82 KB
/
Copy path36. Valid Sudoku.py
File metadata and controls
55 lines (43 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""
https://leetcode.com/problems/valid-sudoku/
Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
Each row must contain the digits 1-9 without repetition.
Each column must contain the digits 1-9 without repetition.
Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.
Note:
A Sudoku board (partially filled) could be valid but is not necessarily solvable.
Only the filled cells need to be validated according to the mentioned rules.
"""
from collections import defaultdict
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
rows, cols, squares = defaultdict(set), defaultdict(set), defaultdict(set)
for row_idx in range(9):
for col_idx in range(9):
symbol = board[row_idx][col_idx]
if symbol == '.':
continue
square = row_idx // 3, col_idx // 3
if symbol in rows[row_idx] or symbol in cols[col_idx] or symbol in squares[square]:
return False
rows[row_idx].add(symbol)
cols[col_idx].add(symbol)
squares[square].add(symbol)
return True
board = [
["5", "3", ".", ".", "7", ".", ".", ".", "."],
["6", ".", ".", "1", "9", "5", ".", ".", "."],
[".", "9", "8", ".", ".", ".", ".", "6", "."],
["8", ".", ".", ".", "6", ".", ".", ".", "3"],
["4", ".", ".", "8", ".", "3", ".", ".", "1"],
["7", ".", ".", ".", "2", ".", ".", ".", "6"],
[".", "6", ".", ".", ".", ".", "2", "8", "."],
[".", ".", ".", "4", "1", "9", ".", ".", "5"],
[".", ".", ".", ".", "8", ".", ".", "7", "9"]
]
s = Solution()
assert s.isValidSudoku(board) is True