52. N皇后II
题目链接
dfs
- 方法与前面一题相同,就是无需保存和打印棋盘,只需要统计解的数量即可
class Solution {
int ans = 0;
public int totalNQueens(int n) {
dfs(n, 0, new boolean[n], new boolean[2*n-1], new boolean[2*n-1]);
return ans;
}
private void dfs(int n, int i, boolean[] column, boolean[] diagonal1, boolean[] diagonal2){
if(i == n){
ans++;
return;
}
for(int j = 0; j < n; j++){
if(column[j]) continue;
if(diagonal1[i+j]) continue;
if(diagonal2[i-j+n-1]) continue;
column[j] = true;
diagonal1[i+j] = true;
diagonal2[i-j+n-1] = true;
dfs(n, i+1, column, diagonal1, diagonal2);
column[j] = false;
diagonal1[i+j] = false;
diagonal2[i-j+n-1] = false;
}
}
}
打表
class Solution {
public int totalNQueens(int n) {
int[] ans = new int[]{0,1,0,0,2,10,4,40,92,352,724,2680};
return ans[n];
}
}