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;}}