Python 如何更改类方法中的列表元素
这里我想解决给定的数独问题Python 如何更改类方法中的列表元素,python,sudoku,in-place,Python,Sudoku,In Place,这里我想解决给定的数独问题 class Solution: def solveSudoku(self, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """ def is_correct(row, col, num): #column
class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
def is_correct(row, col, num):
#column
for c in range(9):
if board[row][c] == num:
return False
#row
for r in range(9):
if board[r][col] == num:
return False
#square
x = row//3 * 3
y = col//3 * 3
for i in range(3):
for j in range(3):
if board[x+i][y+j] == num:
return False
return True
def find_next():
for i in range(9):
for j in range(9):
if board[i][j] == '.':
return i, j
return None, None
def solve():
row, col = find_next()
if row == None:
print(board)
return True
for i in range(1, 10):
if is_correct(row, col, str(i)):
board[row][col] = str(i)
solve()
board[row][col] = '.'
solve()
solve
函数中的print
函数返回已求解的数独板,但不会在原地更改。如何更改函数,以便更改板的位置?找到解决方案后,返回调用堆栈上的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"]]
class Solution:
def solveSudoku(self, board) -> None:
"""
Do not return anything, modify board in-place instead.
"""
solve()
def is_correct(row, col, num):
#column
for c in range(9):
if board[row][c] == num:
return False
#row
for r in range(9):
if board[r][col] == num:
return False
#square
x = row//3 * 3
y = col//3 * 3
for i in range(3):
for j in range(3):
if board[x+i][y+j] == num:
return False
return True
def find_next():
for i in range(9):
for j in range(9):
if board[i][j] == '.':
return i, j
return None, None
def solve():
#print(id(board))
row, col = find_next()
if row == None:
#print(board)
return True
for i in range(1, 10):
if is_correct(row, col, str(i)):
board[row][col] = str(i)
if solve(): return True # solution found
board[row][col] = '.' # no solution yet
Solution().solveSudoku(board)
print(board) # global board
输出
[['5', '3', '4', '6', '7', '8', '9', '1', '2'],
['6', '7', '2', '1', '9', '5', '3', '4', '8'],
['1', '9', '8', '3', '4', '2', '5', '6', '7'],
['8', '5', '9', '7', '6', '1', '4', '2', '3'],
['4', '2', '6', '8', '5', '3', '7', '9', '1'],
['7', '1', '3', '9', '2', '4', '8', '5', '6'],
['9', '6', '1', '5', '3', '7', '2', '8', '4'],
['2', '8', '7', '4', '1', '9', '6', '3', '5'],
['3', '4', '5', '2', '8', '6', '1', '7', '9']]
您希望在终端上更改文本而不重新绘制电路板?我假设您谈论的是输出到终端,而不是输出完整的电路板并让它滚动屏幕以替换先前的电路板,但是,需要更改的几个字符似乎只是更改,而不需要重新绘制或滚动棋盘的其余部分。是这样吗。如果是这样的话,那么我知道做这种事情的唯一方法就是诅咒。请检查。@Mike67我正在尝试解决上述链接中的问题。但是作为参数传递的“board”不是全局更改,而是在
solve
函数中局部更改。但我想在全球范围内改变它。请参阅链接以了解更多信息details@Steve我试图解决上面提到的链接问题,我得到了参数“board”不全局变化的上述问题