X & 1 == 1 OR == 0 判断奇偶

X = X & (X-1 ) => 清零最低位的1

X & -X => 得到最低位的1

N皇后的位运算解法

  1. const totalNQueens = function(n) {
  2. let res = 0;
  3. const dfs = (n, row, cols, pie, na) => {
  4. if (row >= n) {
  5. res++;
  6. return;
  7. }
  8. let bits = (~(cols | pie | na)) & ((1 << n) - 1) // 1
  9. while (bits) { // 2
  10. let p = bits & -bits // 3
  11. dfs(n, row + 1, cols | p, (pie | p) << 1, (na | p) >> 1) // 4
  12. bits = bits & (bits - 1) // 5
  13. }
  14. }
  15. dfs(n, 0, 0, 0, 0);
  16. return res;
  17. };
  1. 一个数和 0 做异或运算等于其本身
  2. 一个数和它本身做异或运算等于 0
  3. 异或运算满足交换律和结合律

136. 只出现一次的数字

  1. const singleNumber = function(nums) {
  2. let ans = 0
  3. for (const num of nums) {
  4. ans ^= num
  5. }
  6. return ans
  7. }