52. N皇后II - LeetCode

52. N皇后II

题目链接

dfs

  • 方法与前面一题相同,就是无需保存和打印棋盘,只需要统计解的数量即可
class Solution {

    int ans = 0;

    public int totalNQueens(int n) {
        dfs(n, 0, new boolean[n], new boolean[2*n-1], new boolean[2*n-1]);
        return ans;
    }

    private void dfs(int n, int i, boolean[] column, boolean[] diagonal1, boolean[] diagonal2){
        if(i == n){
            ans++;
            return;
        }
        for(int j = 0; j < n; j++){
            if(column[j]) continue;
            if(diagonal1[i+j]) continue;
            if(diagonal2[i-j+n-1]) continue;
            column[j] = true;
            diagonal1[i+j] = true;
            diagonal2[i-j+n-1] = true;
            dfs(n, i+1, column, diagonal1, diagonal2);
            column[j] = false;
            diagonal1[i+j] = false;
            diagonal2[i-j+n-1] = false;
        }
    }
}

打表

  • 题中1<=n<=9,所以事先算完打表输出即可
class Solution {
    public int totalNQueens(int n) {
        int[] ans = new int[]{0,1,0,0,2,10,4,40,92,352,724,2680};
        return ans[n]; 
    }
}
posted @ 2021-03-10 14:45  一天到晚睡觉的鱼  阅读(37)  评论(0编辑  收藏  举报