class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
ans = []
board = [["." for i in range(n)] for j in range(n)] #棋盘
def backtrack(board, row):
if row == n:
ans.append([''.join(line) for line in board]) #将每一行转变为字符串
for col in range(0, n):
if valid(board,row,col):
#do
board[row][col] = 'Q'
backtrack(board,row+1)
# undo
board[row][col] = "."
def valid(board, row, col): #当前行、列能不能放Q
for i in range(0, row):
if board[i][col]=="Q":
return False
i, j = row -1,col+1 #右上
while i>=0 and j< n:
if board[i][j]=="Q":
return False
i -= 1
j +=1
i,j =row -1, col -1 #左上
while i >=0 and j>=0:
if board[i][j]=="Q":
return False
i -= 1
j -= 1
return True
backtrack(board,0) #从0行开始
return ans