leetcode每日一题(20241202)
52 N 皇后 题目描述:
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
n皇后问题,之前看过一个软考的讲的很清晰,就是放一个然后就去和之前的已经放好的皇后位置去挨个比较当前放的这个皇后位置是否合法,直到放完所有的棋牌。
class Solution {
public int totalNQueens(int n) {
int[] pre=new int[n+1];
int count=0;
int j=1;
while(j>=1){
do{
// 从棋盘的第一个开始试探方知皇后
pre[j]=pre[j]+1;
}while(pre[j]<=n&&!check(pre,j));
if(pre[j]<=n){
if(j==n){
count++;
}else{
j++;
}
}else{
pre[j]=0;
j--;
}
}
return count;
}
// 检测当前位置是否和之前的已经放的皇后位置发生冲突
public boolean check(int[] pre,int j){
for(int i=1;i<j;i++){
if(pre[i]==pre[j]||Math.abs(i-j)==Math.abs(pre[i]-pre[j])){
return false;
}
}
return true;
}
}
加油!!!好久没写了。