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 the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4 Output: 2 Explanation: There are two distinct solutions to the 4-queens puzzle as shown below. [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
Code:
class Solution {
public int totalNQueens(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.size();
}
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);
}
}
}
}