Determine if a 9x9
Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
1. Each row must contain the digits 1-9
without repetition.
2. Each column must contain the digits 1-9
without repetition.
3. Each of the nine 3x3
sub-boxes of the grid must contain the digits 1-9
without repetition.
Nots:
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
[["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.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
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 |
board.length == 9
board[i][j]
is a digit 1-9
or .
.class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
# 가로
for i in range(9) :
test = set()
for j in board[i] :
if j != '.' :
if int(j) in test : return False
test.add(int(j))
# 세로
for i in range(9) :
test = set()
for j in range(9) :
if board[j][i] != '.' :
if int(board[j][i]) in test : return False
test.add(int(board[j][i]))
# 한칸
for i in range(3) :
for j in range(3) :
row = i * 3 # 행
column = j * 3 # 열
test = set()
for z in range(3) :
for k in range(3) :
num = board[row+z][column+k]
if num != '.' :
if int(num) in test :
return False
test.add(int(num))
return True