主要是中间那段调用 if self.backtracking(board): 返回True,以及后面一个return False和return True不好理解。之后还要深入理解
class Solution:
def solveSudoku(self, board):
self.backtracking(board)
def backtracking(self, board):
for i in range(len(board)): # 行
for j in range(len(board[0])): # 列
if board[i][j] != ".":
continue
for k in range(1, 10):
if self.is_valid(i, j, k, board):
board[i][j] = str(k)
if self.backtracking(board):
return True
board[i][j] = "."
return False
return True
def is_valid(self, i, j, k, board):
for l in range(9):
if board[i][l] == str(k):
return False
for m in range(9):
if board[m][j] == str(k):
return False
row = i // 3
col = j // 3
for s in range(row * 3, row * 3 + 3):
for t in range(col * 3, col * 3 + 3):
if board[s][t] == str(k):
return False
return True
board = [["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"]]
Solution().solveSudoku(board)
for i in board:
print(i)