题目:N-Queens II
难度:hard
问题描述:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
解题思路:
与 leetCode练习(51)基本一样。在此不再赘述。
具体代码如下:
public class h_52_NQueens2 {
int res=0;
public int solveNQueens(int n) {
if(n==1){
return 1;
}
char[][] board=new char[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
board[i][j]='.';
}
}
diedai(board,0);
return res;
}
public void diedai(char[][] b,int steps){
if(steps==b.length){//所有皇后放完,将棋盘存入lists
res++;
return;
}
char[][] boardtemp=new char[b.length][b.length];
for(int ii=0;ii<b.length;ii++){
for(int jj=0;jj<b.length;jj++){
boardtemp[ii][jj]=b[ii][jj];
}
}
for(int n=0;n<b.length;n++){
if(!this.isvalidate(b, steps, n)){
continue;
}else{
boardtemp[steps][n]='Q';
diedai(boardtemp,steps+1);
}
boardtemp[steps][n]='.';
}
}
public boolean isvalidate(char[][] b,int x,int y){
for(int i=0;i<b.length;i++){
for(int j=0;j<b.length;j++){
if(b[i][j]=='Q'&&(x==i||y==j||(Math.abs(i-x)==Math.abs(j-y)))){
return false;
}
}
}
return true;
}
}