N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路:解决了上题,这题也就迎刃而解,或者说这题要不上题还要简单一些。
具体代码如下:
public class Solution {
int count = 0;
public int totalNQueens(int n) {
int[] x = new int[n];
queens(x, n, 0);
return count;
}
void queens(int[] x,int n,int row){
for(int i = 0; i < n; i++){
if(check(x,n,row,i)){//判断合法
x[row] = i;//将皇后放在第row行,第i列
if(row == n-1){//如果是最后一行,则输出结果
count++;
x[row] = 0;//回溯,寻找下一个结果
return;
}
queens(x, n, row+1);//寻找下一行
x[row] = 0;//回溯
}
}
}
/**
* @param x 数组解
* @param n 棋盘长宽
* @param index 当前放置行
* @param i 当前放置列
* @return
*/
boolean check(int[] x,int n,int row, int col){
for(int i = 0; i < row; i++){
if(x[i] == col || x[i] + i == col + row || x[i] - i == col - row)
return false;
}
return true;
}
}
绝招:这题还有一个非常简单的解法,不看下面代码你能想出来吗?
—————————————————————————————
代码如下:
public class Solution {
//棋盘长宽在10之内的全部结果数
int[] x = new int[]{0,1,0,0,2,10,4,40,92,352,724};
public int totalNQueens(int n) {
return x[n];
}
}