【原题】
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens’ placement, where ‘Q’ and ‘.’ both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[“.Q..”, // Solution 1
“…Q”,
“Q…”,
“..Q.”],[“..Q.”, // Solution 2
“Q…”,
“…Q”,
“.Q..”]
]
【Java】
public class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> ret = new ArrayList<List<String>>();
char[][] board = new char[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
board[i][j]='.';
}
}
solve(board,0,ret);
return ret;
}
private static void solve(char[][] board, int colIndex, List<List<String>> ret) {
for (int i = 0; i < board.length; i++) {
if(colIndex==board.length){
ret.add(convert(board));
return;
}
if(isValid(board,i,colIndex)){
board[i][colIndex] = 'Q';
solve(board,colIndex+1,ret);
board[i][colIndex] = '.';
}
}
}
private static boolean isValid(char[][] board, int x, int y) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < y; j++) {
if(board[i][j]=='Q' && ((i-j)==(x-y)||(i+j)==(x+y)||(x==i)))
return false;
}
}
return true;
}
private static List<String> convert(char[][] board) {
List<String> ret = new LinkedList<String>();
for (int i = 0; i < board.length; i++) {
String str = "";
for (int j = 0; j < board.length; j++) {
str +=board[i][j];
}
ret.add(str);
}
return ret;
}
}