【力扣】 - 52.N皇后Ⅱ

87 阅读1分钟

N皇后Ⅱ

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

原理:回溯算法

const __builtin_popcount = (x) => x.toString(2).split('').reduce((prev, v) => prev + (v === '1'), 0);
const solve = (n, row, columns, diagonals1, diagonals2) => {
    if (row === n) {
        return 1;
    } else {
        let count = 0;
        let availablePositions = ((1 << n) - 1) & (~(columns | diagonals1 | diagonals2));
        while (availablePositions != 0) {
            const position = availablePositions & (-availablePositions);
            availablePositions = availablePositions & (availablePositions - 1);
            count += solve(n, row + 1, columns | position, (diagonals1 | position) << 1, (diagonals2 | position) >> 1);
        }
        return count;
    }
}
var totalNQueens = function(n) {
    return solve(n, 0, 0, 0, 0);
};