Leetcode #36
Holy shit man thats a lot of loops. Still O(1) though, based question.
Problem
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.
Example 1:
Input: 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”]]
Output: true
Example 2:
Input: board =
[[“8”,“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”]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8’s in the top left 3x3 sub-box, it is invalid.
Constraints:
board.length 9
board[i].length 9
board[i][j] is a digit 1-9 or ’.‘.
My Solution
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
"""
- a particular cell belongs to:
- a box
- a row
- a column
- check row:
- for i in range(9)
- set seen
- row = board[i]
- for j in range(9)
- if row[j] in seen return False
- check column
- for j in range(9)
- set seen
- for i in range(9)
- check (board[i][j])
- if num in seen return False
- check box:
- for rowStart in range(0,9,3)
- for colStart in range(0,9,3)
- set seen
- for i in range(rowStart, rowStart+3)
- for j in range(colStart, colStart + 3)
"""
# check row
for i in range(9):
seen = set()
for j in range(9):
num = board[i][j]
if (num == "."):
continue
if num in seen:
return False
else:
seen.add(num)
# check col
for j in range(9):
seen = set()
for i in range(9):
num = board[i][j]
if (num == "."):
continue
if num in seen:
return False
else:
seen.add(num)
# check box
for rowStart in range(0,9,3):
for colStart in range(0,9,3):
seen = set()
for i in range(rowStart,rowStart+3):
for j in range(colStart,colStart+3):
num = board[i][j]
if (num == "."):
continue
if num in seen:
return False
else:
seen.add(num)
return True