皇后https://leetcode-cn.com/probl...定义三个标签数组:col表示每列是否被占用,布尔类型ul2dr表示从左上角到右下角的斜杠是否被占用,长度为2×n-1、下标转换:i=x-y+n-1,因为在这个斜杠上,横纵坐标的差值是固定的。ur2dl从右上角到左下角的斜线是否被占用,长度为2×n-1,下标转换:i=x+y,因为在这条对角线上,横纵坐标之和为固定类解决方案:defsolveNQueens(self,n:int)->List[List[str]]:mp=[['.']*nforiinrange(n)]col=[False]*nul2dr=[0]*(n*2-1)ur2dl=[0]*(n*2-1)ans=[]defdfs(i):如果我==n:ans.append([''.join(x)forxinmp])forjinrange(n):pos1=i-j+n-1pos2=i+j如果不是col[j]andul2dr[pos1]==0andur2dl[pos2]==0:#这个位置没有被占用col[j]=Trueul2dr[pos1]+=1ur2dl[pos2]+=1mp[i][j]='Q'dfs(i+1)mp[i][j]='.'col[j]=假ul2dr[pos1]-=1ur2dl[pos2]-=1dfs(0)返回ans
