Skip to content

Code:

js
/**
 * @param {number} n
 * @return {number}
 */
var totalNQueens = function (n) {
    const matrix = Array(n).fill('#').map(() => Array(n).fill('#'))
    let count = 0

    const dfs = (i = 0, visited = Array(n), left = Array(2 * n - 1), right = Array(2 * n - 1)) => {
        if (i === n) {
            return count++
        }

        for (let j = 0; j < n; j++) {
            const l = i - j
            const r = i + j

            if (!visited[j] && !left[l] && !right[r]) {
                // 染
                // ran(i, j)
                matrix[i][j] = 'Q'
                left[l] = right[r] = visited[j] = true

                dfs(i + 1, visited, left, right)
                // 恢复
                matrix[i][j] = '#'
                left[l] = right[r] = visited[j] = false
            }
        }

        return count
    }

    return dfs()
};

console.time('2')
console.log(totalNQueens(10))
console.timeEnd('2')

❤ With Algorithm