Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
题意解析:
好吧这题和N-Queens一样,甚至还简单了,思路可以参考我之前写的这篇博客leetcode-51. N-Queens,这里直接给出代码了:
public class Solution {
private int result = 0;
public int totalNQueens(int n) {
int[] queens = new int[n];
backTracking(queens, n, 0);
return result;
}
public void backTracking(int[] queens, int n, int row){
for(int col = 0; col < n; col++){
if(check(queens, n, row, col)){
queens[row] = col;
if(row == n - 1){
result++;
queens[row] = 0;
return;
}
backTracking(queens, n, row + 1);
queens[row] = 0;
}
}
}
public boolean check(int[] queens, int n, int row, int col){
for(int i = 0; i < row; i++){
//三种情况不成立:正斜线(q[i]-i=q[j]-j),反斜线(q[i]+i=q[j]+j),列相等,注意这里行是不可能相等的
if(queens[i] == col || queens[i] + i == col + row || queens[i] - i == col - row){
return false;
}
}
return true;
}
}
噫!LeetCode正在修复运行时间分布图,如果我以后想起来的话,这个图片会改掉的。