有效数独
题目要求
解题思路
一个简单的方法是,遍历9*9
书读三次,以确保:
- 行中没有重复的数字
- 列中没有重复的数字
3*3
子数独中没有重复的数字
但是,实际上,所有的一切都以可以在一次迭代中完成
可以使用box_index = (row/3*3 + columns / 3
,其中/
是整出
如何确保行、列、子数独没有重复项
可以利用value -> count
哈希映射来跟踪所有已经遇到的值
代码
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
# init data
rows = [{} for i in range(9)]
columns = [{} for i in range(9)]
boxes = [{} for i in range(9)]
# validate a board
for i in range(9):
for j in range(9):
num = board[i][j]
if num != '.':
num = int(num)
box_index = (i // 3 ) * 3 + j // 3
# keep the current cell value
rows[i][num] = rows[i].get(num, 0) + 1
columns[j][num] = columns[j].get(num, 0) + 1
boxes[box_index][num] = boxes[box_index].get(num, 0) + 1
# check if this value has been already seen before
if rows[i][num] > 1 or columns[j][num] > 1 or boxes[box_index][num] > 1:
return False
return True
复杂度分析
时间复杂度:
O
(
N
)
O(N)
O(N)
空间复杂度:
O
(
1
)
O(1)
O(1)