52. N皇后 II

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这里是求个数,所以思路完全一样,就是到结合条件的时候个数累加即可。
int ret = 0;
public int totalNQueens(int n) {
char[][] board = new char[n][n];
dfs(board,0);
return ret;
}
public void dfs(char[][] board, int row) {
if(row == board.length) {
ret++;
return;
}
// 对于该行来说,有n中选择。每一个都试
for(int i=0;i<board.length;i++) {
if(!checkOther(board,row,i)) {
continue;
}
board[row][i] = 'Q';
dfs(board,row+1);
board[row][i] = '.';
}
}
public boolean checkOther(char[][] board,int row, int col) {
for(int i=0;i<board.length;i++) {
if(board[row][i] == 'Q') {
return false;
}
}
for(int i=0;i<board.length;i++) {
if(board[i][col] == 'Q') {
return false;
}
}
int p=row;
int q=col;
while(q>=0 && p>=0) {
if(board[p][q] == 'Q') {
return false;
}
p--;
q--;
}
p=row;
q=col;
while(p>=0 && q<board.length) {
if(board[p][q] == 'Q') {
return false;
}
p--;
q++;
}
p=row;
q=col;
while(p<board.length && q >=0) {
if(board[p][q] == 'Q') {
return false;
}
p++;
q--;
}
p=row;
q=col;
while(p<board.length && q<board.length) {
if(board[p][q] == 'Q') {
return false;
}
p++;
q++;
}
return true;
}
浙公网安备 33010602011771号