import java.util.*; public class Solution { /** * * @param n int整型 the n * @return int整型 */ Set column = new HashSet(); //标记列不可用 Set posSlant = new HashSet();//标记正斜线不可用 Set conSlant = new HashSet();//标记反斜线不可用 int result = 0;
public int Nqueen (int n) {
// write code here
compute(0, n);
return result;
}
private void compute(int i, int n){
if(i == n){
result++;
return;
}
for(int j = 0; j < n; j++){
if(column.contains(j) || posSlant.contains(i - j) || conSlant.contains(i + j)){
continue;
}
column.add(j);//列号j
posSlant.add(i - j);//行号i - 列号j 正斜线
conSlant.add(i + j);//行号i + 列号j 反斜线
compute(i + 1, n); //计算下一行
column.remove(j); //完成上一步递归计算后,清除
posSlant.remove(i - j);
conSlant.remove(i + j);
}
}
}