现在就编写一个程序,通过填充空格来解决数独问题。
数独的解法需 遵循如下规则:
1.数字 1-9 在每一行只能出现一次。
2.数字 1-9 在每一列只能出现一次。
3.数字 1-9 在每一个宫内只能出现一次。
class Solution:
def solveSudoku(self, board) :
"""
Do not return anything, modify board in-place instead.
"""
row = [[False] * 9 for _ in range(9)]
col = [[False] * 9 for _ in range(9)]
block = [[[False] * 9 for _ in range(3)] for _ in range(3)]
for i in range(9):
for j in range(9):
if board[i][j] != '.':
d = int(board[i][j])
row[i][d - 1] = True
col[j][d - 1] = True
block[i // 3][j // 3][d - 1] = True
def is_valid(x, y, num):
if row[x][num - 1] or col[y][num - 1] or block[x // 3][y // 3][num - 1]:
return False
return True
def helper(board):
for i in range(9):
for j in range(9):
if board[i][j] == '.':
for k in range(1, 10):
if is_valid(i, j, k):
board[i][j] = str(k)
row[i][k - 1] = col[j][k - 1] = block[i // 3][j // 3][k - 1] = True
if helper(board):
return True
row[i][k - 1] = col[j][k - 1] = block[i // 3][j // 3][k - 1] = False
board[i][j] = "."
return False
return True
helper(board)
之后会出"N皇后问题"的python解法