# @lc code=start classSolution: defsolveSudoku(self, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """ nums = {"1", "2", "3", "4", "5", "6", "7", "8", "9"} row = [set() for _ inrange(9)] col = [set() for _ inrange(9)] palace = [[set() for _ inrange(3)] for _ inrange(3)] # 3*3 blank = []
# 初始化,分别存入哈希表 for i inrange(9): for j inrange(9): ch = board[i][j] if ch=='.': blank.append((i, j)) else: row[i].add(ch) col[j].add(ch) palace[i//3][j//3].add(ch)
defdfs(n): if n==len(blank): returnTrue i, j = blank[n] restNum = nums - row[i]-col[j]-palace[i//3][j//3] ifnot restNum: returnFalse for num in restNum: board[i][j] = num row[i].add(num) col[j].add(num) palace[i//3][j//3].add(num) if dfs(n+1): returnTrue row[i].remove(num) col[j].remove(num) palace[i//3][j//3].remove(num)