-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathleetcode_0036.py
64 lines (54 loc) · 2.13 KB
/
leetcode_0036.py
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
56
57
58
59
60
61
62
63
64
from typing import List
class Solution:
def eachBox(self, mat, i, j):
nums = []
for r in range(i, i + 3): # row
for c in range(j, j + 3): # column
tmp = mat[r][c]
if tmp != ".":
if tmp in nums:
return False
nums.append(tmp)
return True
def eachLine(self, mat, i, j, length):
nums = []
if i == 0: # horizontal
for it in range(length):
tmp = mat[j][it]
if tmp != ".":
if tmp in nums:
return False
nums.append(tmp)
nums = []
if j == 0: # vertical
for jt in range(length):
tmp = mat[jt][i]
if tmp != ".":
if tmp in nums:
return False
nums.append(tmp)
return True
def isValidSudoku(self, board: List[List[str]]) -> bool:
length = len(board)
# first check 3x3 boxes
for j in range(0, length, 3):
for i in range(0, length, 3):
if not self.eachBox(board, i, j):
return False
# second check lines vertical and horizontal
for ij in range(length):
if not self.eachLine(board, 0, ij, length):
return False
if not self.eachLine(board, ij, 0, length):
return False
return True
s = Solution()
print(s.isValidSudoku([[".", ".", ".", ".", ".", ".", ".", ".", "."],
["8", ".", ".", ".", ".", "7", ".", ".", "."],
[".", ".", ".", "8", ".", ".", ".", ".", "."],
[".", ".", ".", ".", "9", ".", "2", ".", "5"],
["8", ".", ".", ".", ".", ".", ".", ".", "."],
[".", ".", ".", ".", ".", ".", ".", ".", "."],
[".", "3", ".", ".", "6", ".", ".", ".", "."],
[".", ".", ".", ".", ".", ".", ".", "8", "."],
[".", ".", "9", ".", ".", ".", ".", ".", "."]]))