class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
# 如果n为0,直接返回空列表
if not n: return []
# 初始化棋盘,用'.'表示空位置
board = [['.'] * n for _ in range(n)]
# 用于存储所有的解
res = []
# 判断某个位置是否可以放置皇后
def isVaild(board,row, col):
# 判断同一列是否冲突
for i in range(len(board)):
if board[i][col] == 'Q':
return False
# 判断左上角是否冲突
i = row -1
j = col -1
while i>=0 and j>=0:
if board[i][j] == 'Q':
return False
i -= 1
j -= 1
# 判断右上角是否冲突
i = row - 1
j = col + 1
while i>=0 and j < len(board):
if board[i][j] == 'Q':
return False
i -= 1
j += 1
# 如果没有冲突,返回True
return True
# 回溯搜索函数
def backtracking(board, row, n):
# 如果走到最后一行,说明已经找到一个解,将其添加到结果列表中
if row == n:
# 将当前的棋盘状态转换成一个列表,加入到结果列表中
temp_res = []
for temp in board:
temp_str = "".join(temp)
temp_res.append(temp_str)
res.append(temp_res)
return
# 对于每一行,依次枚举所有列,判断是否可以放置皇后
for col in range(n):
if not isVaild(board, row, col):
continue
# 如果可以放置皇后,就将皇后放置在该位置,并继续搜索下一行
board[row][col] = 'Q'
backtracking(board, row+1, n)
# 回溯,将当前位置重新标记为'.',进行下一次尝试
board[row][col] = '.'
# 调用回溯搜索函数,开始搜索
backtracking(board, 0, n)
# 返回所有的解
return res
在算法中,首先创建一个n x n的棋盘,用’.'代表空位置。接着,定义了一个isVaild函数,用于判断某个位置是否可以放置皇后,它通过检查同一列、左上角和右上角是否已经有皇后来进行判断。然后,定义了一个backtracking函数,用于进行回溯搜索。在回溯搜索过程中,对于每一行,依次枚举所有列,判断是否可以放置皇后,如果可以,就将皇后放置在该位置,并继续搜索下一行。如果已经到达了最后一行,说明已经找到了一个解,将该解添加到结果列表中。最后返回结果列表。