Problem Description:
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.Example:
Input: 4 Output: [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ] Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
Code:
class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> res = new ArrayList<List<String>>();
func(0, n, new ArrayList<String>(), new boolean[n], new boolean[2*n], new boolean[2*n], res);
return res;
}
void func(int row, int n, List<String> tmp, boolean[] cl, boolean[] dg1, boolean[] dg2, List<List<String>> res) {
if(row == n) {
res.add(new ArrayList<String>(tmp));
}
for(int i = 0; i < n; i++) {
int id1 = i - row + n;
int id2 = i + row;
if(!cl[i] && !dg1[id1] && !dg2[id2]) {
char[] r = new char[n];
Arrays.fill(r, '.');
r[i] = 'Q';
tmp.add(new String(r));
cl[i] = true;
dg1[id1] = true;
dg2[id2] = true;
func(row+1, n, tmp, cl, dg1, dg2, res);
cl[i] = false;
dg1[id1] = false;
dg2[id2] = false;
tmp.remove(tmp.size() - 1);
}
}
}
}