52. N 皇后 II

30 阅读1分钟

52. N 皇后 II

相关企业

n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

 

示例 1:

输入: n = 4
输出: 2
解释: 如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入: n = 1
输出: 1

 

提示:

  • 1 <= n <= 9

解题答案

class Solution {
    int ways;
    boolean[] cols;
    boolean[] leftTop;
    boolean[] rightTop;

    public int totalNQueens(int n) {
        cols = new boolean[n];
        leftTop = new boolean[(n << 1) - 1];
        rightTop = new boolean[(n << 1) - 1];
        place(0);
        return ways;
    }

    private void place(int row) {
        if (row == cols.length) {
            ways++;
            return;
        }
        for (int col = 0; col < cols.length; col++) {
            if (cols[col]) continue;

            int ltIndex = row - col + cols.length - 1;
            if (leftTop[ltIndex]) continue;

            int rtIndex = row + col;
            if (rightTop[rtIndex]) continue;

            cols[col] = true;
            leftTop[ltIndex] = true;
            rightTop[rtIndex] = true;
            place(row + 1);

            cols[col] = false;
            leftTop[ltIndex] = false;
            rightTop[rtIndex] = false;

        }
    }
}