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); };
这篇文章详细介绍了N皇后问题的II版本,运用回溯算法解决,通过递归求解N皇后在棋盘上放置的方法,时间复杂度为O(N!)。通过JavaScript代码展示了如何利用位操作优化查找可用位置。
511

被折叠的 条评论
为什么被折叠?



