题目描述(困难难度)
class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
self.solver(board)
def solver(self,board):
for i in range(9):
for j in range(9):
if board[i][j] == '.':
count = 1
while count <= 9:
if self.isVaild(i,j,board,count):
board[i][j] = str(count)
if self.solver(board):
return True
else:
board[i][j] = '.'
count += 1
return False
return True
def isVaild(self,row,col,board,c):
# 判断是否符合每一行不同
for i in range(9):
if board[row][i] == str(c):
return False
# 判断是否符合每一列不同
for j in range(9):
if board[j][col] == str(c):
return False
# 判断是否符合每一个区块不同
start_row = row // 3 * 3
start_col = col // 3 * 3
for i in range(3):
for j in range(3):
if board[start_row + i][start_col + j] == str(c):
return False
return True
s = Solution()
result = s.solveSudoku([[".", ".", "4", ".", ".", ".", "6", "3", "."],
[".", ".", ".", ".", ".", ".", ".", ".", "."],
["5", ".", ".", ".", ".", ".", ".", "9", "."],
[".", ".", ".", "5", "6", ".", ".", ".", "."],
["4", ".", "3", ".", ".", ".", ".", ".", "1"],
[".", ".", ".", "7", ".", ".", ".", ".", "."],
[".", ".", ".", "5", ".", ".", ".", ".", "."],
[".", ".", ".", ".", ".", ".", ".", ".", "."],
[".", ".", ".", ".", ".", ".", ".", ".", "."]])
print(result)