https://leetcode.com/problems/valid-sudoku/description/
Determine if a 9x9 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 9
3x3
sub-boxes of the grid must contain the digits1-9
without repetition.
A partially filled sudoku which is valid.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
Example 1:
Input: [ ["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
class Solution:
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
# for columns
for col in board:
for i in range(0,8):
if col[i]!="." and col[i] in col[i+1:]:
return False
#for rows
for i in range(0,9):
#solve row by row
l=[item[i] for item in board]
for j in range(0,8):
if l[j]!="." and l[j] in l[j+1:]:
return False
#for 3x3 boxes
for i in range(0,3):
n=i*3
# 3 boxes in line left to right
a=board[n][0:3]+board[n+1][0:3]+board[n+2][0:3]
b=board[n][3:6]+board[n+1][3:6]+board[n+2][3:6]
c=board[n][6:9]+board[n+1][6:9]+board[n+2][6:9]
for j in range(0,8):
if a[j]!="." and a[j] in a[j+1:]:return False
if b[j]!="." and b[j] in b[j+1:]:return False
if c[j]!="." and c[j] in c[j+1:]:return False
return True