【发布时间】:2021-05-28 20:49:18
【问题描述】:
给定 n==4, 返回 [[[".","Q",".","."],[".",".",".","Q"],["Q",".",". ","."],[".",".","Q","."]],[[".",".","Q","."],["Q", ".",".","."],[".",".",".","Q"],[".","Q",".","."]]]
这是我的代码:
def solveNQueens(self, n: int) -> List[List[str]]:
ans=[]
a=[['.' for j in range(n)] for i in range(n)]
def valid(row, col):
for i in range(n):
if a[i][col]=='Q':
return False
for i in range(n):
if (row+i<n and col+i<n):
if a[row+i][col+i]=='Q':
return False
for i in range(n):
if (row-i>=0 and col-i>=0):
if a[row-i][col-i]=='Q':
return False
for i in range(n):
if (row-i>=0 and col+i<n):
if a[row-i][col+i]=='Q':
return False
for i in range(n):
if (row+i<n and col-i>=0):
if a[row+i][col-i]=='Q':
return False
return True
def solver(rowNo):
if rowNo == n:
ans.append(list(a))
return
for i in range(n):
if valid(rowNo, i):
a[rowNo][i]='Q'
solver(rowNo+1)
a[rowNo][i]='.'
return
solver(0)
return ans
当我每次都检查求解器函数中遇到的基本条件时,它正在正确地解决问题。但是,每次我更改 a 时,ans 变量中的附加数组都会更改引用。这导致 ans 数组包含两个以完全空的初始状态附加的 a 列表。我不明白为什么。请帮我理解。
【问题讨论】:
-
很明显这是一个类内部的方法。我推荐使用
@staticmethod,因为您没有使用self参数。该方法与类实例无关
标签: python backtracking