classSolution:defsolveNQueens(self, n:int)-> List[List[str]]:defisValid(paths,idx,n):
m =len(paths)for i inrange(m):if paths[i][idx]=='Q':returnFalse## 开始的错误思路# if paths[-1][idx]=='Q' or idx-1>=0 and paths[-1][idx-1]=='Q' or idx+1<len(paths[0]) and paths[-1][idx+1]=='Q':# return False
i,j = idx-1, m-1while(i>=0and j>=0):if paths[j][i]=='Q':returnFalse
i -=1
j -=1
i,j = idx+1, m-1while(i<n and j>=0):if paths[j][i]=='Q':returnFalse
i +=1
j -=1returnTruedefbacktrace(paths,ans,n):iflen(paths)==n:
ans.append(paths)for i inrange(n):if paths andnot isValid(paths,i,n):continue
string ='.'*i+'Q'+'.'*(n-1-i)
backtrace(paths+[string],ans,n)
ans =[]
backtrace([],ans,n)return ans