题解 | #N皇后问题#
N皇后问题
http://www.nowcoder.com/practice/c76408782512486d91eea181107293b6
运行时间18ms,超过75%
public class Solution {
int answer;
public int Nqueen (int n) {
int to=n+1;
//ans[1]为第一个皇后所在位置, 依此类推
int[] ans=new int[to];
//加了ans[0]占位,第一个皇后就可以不用单独遍历
ans[0]=Integer.MIN_VALUE;
dfs(ans,1,to);
return answer;
}
public void dfs(int[] now,int n,int to){
if(n==to){
answer++;
return;
}
//第n个皇后依次判断能够放在0到to-1的位置i上
for(int i=0;i<to-1;i++){
boolean flag=true;
//依次判断第0到第n-1个皇后j的位置与n是否冲突
for(int j=0;j<n;j++){
int sub=n-j;
int indexJ=now[j];
//列差==行差则在对角线上
if(indexJ+sub==i||indexJ-sub==i||i==indexJ){
//有冲突则判断下一个位置i+1
flag=false;
break;
}
}
if(flag){
now[n]=i;
dfs(now,n+1,to);
}
}
}
} 

CVTE公司福利 715人发布