【发布时间】:2021-03-24 17:37:33
【问题描述】:
我正在研究一个 Leetcode 问题,其中实现了对字符串列表进行操作的数独求解器,返回相同格式的已求解板。我遇到了一个问题,如果我添加一个打印语句,该函数将打印已解决的板,但是当我尝试在同一点返回板时,它返回 None。
def row_legal(board,i,j,k):
row = board[i]
if row.count(str(k))>0:
return False
return True
def box_legal(board,i,j,k):
row_num = i//3
col_num = j//3
box = [board[3*row_num+p][3*col_num+q] for p in range(3) for q in range(3)]
if box.count(str(k))>0:
return False
return True
def col_legal(board,i,j,k):
col = [board[l][j] for l in range(9)]
if col.count(str(k))>0:
return False
return True
def is_available(board,i,j,n):
return col_legal(board,i,j,n) and box_legal(board,i,j,n) and row_legal(board,i,j,n)
def solver(board):
for i in range(9):
for j in range(9):
if board[i][j]=='.':#recursion & backtracking section#
for k in range(1,10):
if is_available(board,i,j,k):
board[i][j]=str(k)
solver(board)
board[i][j]='.'
return
return board
如果solver 的最后一行被替换为print(board),则会打印一个解决方案。但是,返回输出None 或者如果上面的返回返回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"]]
【问题讨论】:
-
“为什么它不能返回一个?”——是什么让你认为它不能?请阅读How to Ask。
-
你从哪里调用求解器?我认为问题不在于这段代码,而在于最初调用求解器的代码。代码应该返回,但您要将解决方案返回到哪里?
-
代码不会返回板句号,目前我一直在 jupyter notebook 中以一行方式运行它:```solver(board) ```
-
如果你要返回一个你需要打印的值(solver(board))
-
如果函数返回任何东西,Jupyter notebook 会打印返回的对象,
标签: python python-3.x recursion sudoku