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 digits 1-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 ‘.’.
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.
The given board contain only digits 1-9 and the character ‘.’.
The given board size is always 9x9.
Example
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
Example 2:
Input:
[
[“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.
Submissions
我的解题思路是首先对应行查询,列查询,块查询建立三个字典,第一个for循环针对题目要求的第一个条件,遍历行内是否有重复元素,判断元素是否在row字典中或者是否为空,如果不在或为空,则将该元素作为key,True作为值,添加进字典中,否则则为重复元素直接返回False。第二个for循环针对题目要求的第二个条件,遍历列内是否有重复元素,判断元素是否在col字典中或者是否为空,如果不在或为空,则将该元素作为key,True作为值,添加进字典中,否则则为重复元素直接返回False。第二个for循环针对题目要求的第三个条件,遍历3*3块内是否有重复元素,判断元素是否在block字典中或者是否为空,如果不在或为空,则将该元素作为key,True作为值,添加进字典中,否则则为重复元素直接返回False。
实现代码如下:
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
for i in range(9):
row,col,block = {},{},{}
for x in board[i]:
if x not in row or x == ".":
row[x] = True
else:return False
for y in board:
if y[i] not in col or y[i] == ".":
col[y[i]] = True
else:return False
for y in board[3*(i//3):3*(i//3)+3]:
for x in y[3*(i%3):3*(i%3)+3]:
if x not in block or x == ".":
block[x] = True
else:return False
return True