题目分析:
这一题很容易想到八(N)皇后问题,而且判断是否成立可以借用【LeetCode】36. Valid Sudoku题的方法。这样我们使用双循环找一个为值’.‘的位置循环换成1-9,判断换前与还后都成立就标记为True,否则还至为’.’。
测试代码:
class Solution:
def solveSudoku(self, board):
def isValid(x,y):
tmp=board[x][y]; board[x][y]='D'
for i in range(9):
if board[i][y]==tmp: return False
for i in range(9):
if board[x][i]==tmp: return False
for i in range(3):
for j in range(3):
if board[int(x/3)*3+i][int(y/3)*3+j]==tmp: return False
board[x][y]=tmp
return True
def dfs(board):
for i in range(9):
for j in range(9):
if board[i][j]=='.':
for k in '123456789':
board[i][j]=k
if isValid(i,j) and dfs(board):
return True
board[i][j]='.'
return False
return True
dfs(board)
print(Solution().solveSudoku([
["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"]
])) # 提交时请删除print