n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
来源:力扣(LeetCode)
思路和51题完全一样,且比51题简单
class Solution {
public int totalNQueens(int n) {
Set<Integer>cols=new HashSet<Integer>();
Set<Integer>dig1=new HashSet<Integer>();
Set<Integer>dig2=new HashSet<Integer>();
return helper(n,0,cols,dig1,dig2);
}
public int helper(int n,int row,Set<Integer>cols,Set<Integer>dig1,Set<Integer>dig2){
if(row==n)
return 1;
int count=0;
for(int i=0;i<n;i++){
if(cols.contains(i))
continue;
int d1=i-row;
if(dig1.contains(d1))
continue;
int d2=i+row;
if(dig2.contains(d2))
continue;
cols.add(i);
dig1.add(d1);
dig2.add(d2);
count+=helper(n,row+1,cols,dig1,dig2);
cols.remove(i);
dig1.remove(d1);
dig2.remove(d2);
}
return count;
}
}