classSolution:defsolveNQueens(self, n:int)-> List[List[str]]:
all_res =list()
tmp_res =[['.']*n for _ inrange(n)]
self.solve(all_res, tmp_res,0, n)return all_res
defsolve(self, all_res, tmp_res, layer, n):if layer == n:
all_res.append([''.join(item)for item in tmp_res])returnfor i inrange(n):if self.is_valid(tmp_res, layer, i):
tmp_res[layer][i]='Q'
self.solve(all_res, tmp_res, layer+1, n)
tmp_res[layer][i]='.'defis_valid(self, tmp_res, x, y):
n =len(tmp_res)# 纵向判断for i inrange(x):if tmp_res[i][y]=='Q':returnFalse# 斜向判断
i =1while x-i>=0and y-i >=0:if tmp_res[x-i][y-i]=='Q':returnFalseelse:
i +=1
i =1while x-i>=0and y+i < n:if tmp_res[x-i][y+i]=='Q':returnFalseelse:
i +=1returnTrue
Java
classSolution{publicList<List<String>>solveNQueens(int n){List<List<String>> res =newArrayList<>();char[][] tmp =newchar[n][n];for(int i =0; i < n;++i){Arrays.fill(tmp[i],'.');}dfs(tmp,0, res);return res;}publicvoiddfs(char[][] tmp,int layer,List<List<String>> res){int n = tmp.length;if(layer == n){List<String> solu =newArrayList<>();for(int k =0; k < n;++k){
solu.add(String.valueOf(tmp[k]));}
res.add(solu);return;}for(int k =0; k < n;++k){if(isValid(tmp, layer, k)){
tmp[layer][k]='Q';dfs(tmp, layer +1, res);
tmp[layer][k]='.';}}}booleanisValid(char[][] tmp,int x,int y){int n = tmp.length;for(int i =0; i < n;++i){if(tmp[i][y]=='Q'&& i < x){returnfalse;}}int i =1;while(x - i >=0&& y - i >=0){if(tmp[x - i][y - i]=='Q'){returnfalse;}++i;}
i =1;while(x - i >=0&& y + i < n){if(tmp[x - i][y + i]=='Q'){returnfalse;}++i;}returntrue;}}