LeetCode Top Interview 150

52. N-Queens II

Hard

The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.

Given an integer n, return the number of distinct solutions to the n-queens puzzle.

Example 1:

Input: n = 4

Output: 2

Explanation: There are two distinct solutions to the 4-queens puzzle as shown.

Example 2:

Input: n = 1

Output: 1

Constraints:

Solution

class Solution:
    def totalNQueens(self, n: int) -> int:
        row = [False] * n
        col = [False] * n
        diagonal = [False] * (2 * n - 1)
        antiDiagonal = [False] * (2 * n - 1)
        return self._totalNQueens(n, 0, row, col, diagonal, antiDiagonal)

    def _totalNQueens(self, n, r, row, col, diagonal, antiDiagonal):
        if r == n:
            return 1
        count = 0
        for c in range(n):
            if not row[r] and not col[c] and not diagonal[r + c] and not antiDiagonal[r - c + n - 1]:
                row[r] = col[c] = diagonal[r + c] = antiDiagonal[r - c + n - 1] = True
                count += self._totalNQueens(n, r + 1, row, col, diagonal, antiDiagonal)
                row[r] = col[c] = diagonal[r + c] = antiDiagonal[r - c + n - 1] = False
        return count