N皇后Ⅱ
时间复杂度:O(N!),空间复杂度:O(N)
原理:回溯算法
js 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); };