leetcode 52题

Posted by franki on June 16, 2021

leetcode 52题 N皇后 II

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

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

示例1

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

示例2

输入:n = 1
输出:1

思路

回溯算法

代码

/**
 * @param {number} n
 * @return {number}
 */
var totalNQueens = function(n) {
    const col = new Set(), dia1 = new Set(), dia2 = new Set(), index = 0;
    return putQueen(n, index, col, dia1, dia2);
};

function putQueen(n, index, col, dia1, dia2) {
    if (n === index) {
        return 1;
    } else {
        let count = 0;
        for (let i=0; i<n; i++) {
            if (col.has(i)) {
                continue;
            }
            const d1 = i - index;
            if (dia1.has(d1)) {
                continue;
            }
            const d2 = i + index;
            if (dia2.has(d2)) {
                continue;
            }
            col.add(i);
            dia1.add(d1);
            dia2.add(d2);
            count += putQueen(n, index+1, col, dia1, dia2);
            col.delete(i);
            dia1.delete(d1);
            dia2.delete(d2);
        }
        return count;
    }
}

复杂度分析:

  • 时间复杂度: O(N!)
  • 空间复杂度:O(1)