如何在 class 方法中就地更改列表元素
How to change the list element inplace in a class method
这里我想就地解决给定的数独问题
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
函数 returns 解决了数独板,但它没有就地更改它。我怎样才能改变功能,以便我就地改变电路板?
找到解决方案后,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"]]
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']]
这里我想就地解决给定的数独问题
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
函数 returns 解决了数独板,但它没有就地更改它。我怎样才能改变功能,以便我就地改变电路板?
找到解决方案后,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"]]
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']]