LeetCode-in-Go

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

func totalNQueens(n int) int {
	row := make([]bool, n)
	col := make([]bool, n)
	diagonal := make([]bool, 2*n-1)
	antiDiagonal := make([]bool, 2*n-1)
	return totalNQueensHelper(n, 0, row, col, diagonal, antiDiagonal)
}

func totalNQueensHelper(
	n, r int,
	row, col, diagonal, antiDiagonal []bool,
) int {
	if r == n {
		return 1
	}
	count := 0
	for c := 0; c < n; c++ {
		if !row[r] && !col[c] && !diagonal[r+c] && !antiDiagonal[r-c+n-1] {
			row[r], col[c], diagonal[r+c], antiDiagonal[r-c+n-1] = true, true, true, true
			count += totalNQueensHelper(n, r+1, row, col, diagonal, antiDiagonal)
			row[r], col[c], diagonal[r+c], antiDiagonal[r-c+n-1] = false, false, false, false
		}
	}
	return count
}