目的: 9×9の数独ボードが有効かどうかを判定する
制約:
時間計算量: O(1) - 固定サイズ(9×9)のため定数時間
空間計算量: O(1) - 最大81個の要素を格納する定数空間
def isValidSudoku(self, board: List[List[str]]) -> bool:
# Set初期化 - O(1)空間、各Setは最大9要素
rows: List[set[str]] = [set() for _ in range(9)]
cols: List[set[str]] = [set() for _ in range(9)]
boxes: List[set[str]] = [set() for _ in range(9)]
# 二重ループ - 固定81回の反復
for i in range(9):
for j in range(9):
cell: str = board[i][j]
# 空セルスキップ - 計算量削減
if cell == '.':
continue
# 3×3ボックスインデックス - O(1)計算
box_index: int = (i // 3) * 3 + (j // 3)
# 重複チェック - 各Set.has()はO(1)
if cell in rows[i] or cell in cols[j] or cell in boxes[box_index]:
return False # 早期終了
# Set追加 - 各Set.add()はO(1)
rows[i].add(cell)
cols[j].add(cell)
boxes[box_index].add(cell)
return True