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);
    }
}

}