DAILY DOCDAILY DOC
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
  • Array

    • 数组
    • 二分查找
    • moveZeros
  • Dynamic-programming

    • 动态规划
  • 刷题指南
  • String

    • 字符串
  • bitwise-operator

    • 位运算符
  • heap
  • history

    • [1014] 最佳观光组合
    • [1022] 从根到叶的二进制数之和
    • [104] 二叉树的最大深度
    • [11] 盛最多水的容器
    • [110] 平衡二叉树
    • [1227] 飞机座位分配概率
    • [129] 求根节点到叶节点数字之和
    • [1306] 跳跃游戏 III
    • [148] 排序链表
    • 155.最小栈
    • [165] 比较版本号
    • 1763. 最长的美好子字符串
    • [1870] 准时到达的列车最小时速
    • [199] 二叉树的右视图
    • [21] 合并两个有序链表
    • 215.数组中的第 k 个最大元素
    • [2306] 公司命名
    • [234] 回文链表
    • [2516] 每种字符至少取 K 个
    • [316] 去除重复字母
    • [3171] 找到按位或最接近 K 的子数组
    • [322] 零钱兑换
    • [41] 缺失的第一个正数
    • [44] 通配符匹配
    • [494] 目标和
    • [509] 斐波那契数
    • [518] 零钱兑换 II
    • [62] 不同路径
    • [676] 实现一个魔法字典
    • 70 爬楼梯
    • [718] 最长重复子数组
    • [78] 子集
    • [82] 删除排序链表中的重复元素 II
    • [871] 最低加油次数
    • [88] 合并两个有序数组
    • [887] 鸡蛋掉落
    • 958.二叉树的完全性检验
    • [98] 验证二叉搜索树
    • [983] 最低票价
    • leetcode practice
    • 约瑟夫问题
    • 移除重复节点
  • linked-list

    • 706. 设计哈希映射
    • 链表
  • stack

    • stack
  • tree

    • Tree Traversal
    • 二叉树的最近公共祖先
    • 二叉树
    • 题目
  • leetCode 刷题
  • 回溯
  • 排序算法

位运算符

七进制数

details
/**
 * 尝试用位运算符处理 ???????
 *
 * @param {number} num
 * @return {string}
 */
var convertToBase7 = function(num) {
  const positive = num > 0;
  let ans = '';

  // 负数需要转换为正数
  if (num < 0) {
    num = -num;
  }
  if (num === 0) {
    return '0';
  }

  while (num > 0) {
    ans = `${num % 7}${ans}`;
    num = (num / 7) >> 0;
  }
  return positive ? ans : `-${ans}`;
};

数字转换为十六进制数

details
var toHex = function(num) {
  if (num === 0) {
    return '0';
  }
  const sb = [];
  for (let i = 7; i >= 0; i--) {
    const val = (num >> (4 * i)) & 0xf;
    if (sb.length > 0 || val > 0) {
      const digit =
        val < 10
          ? String.fromCharCode('0'.charCodeAt() + val)
          : String.fromCharCode('a'.charCodeAt() + val - 10);
      sb.push(digit);
    }
  }
  return sb.join('');
};

位 1 的个数

details
/**
 * 位 1 的个数
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function(n) {
  let ans = 0;
  for (let i = 0; i < 32; i++) {
    // 取出最后一位
    ans += (n >> i) & 1;
    // 终止
    if (n >> i === 0) {
      break;
    }
  }
  return ans;
};


/**
 * 位 1 的个数
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function(n) {
  let ans = 0;
  while (n !== 0) {
    // 取出的第一位一定是 1
    n = n & (n - 1);
    ans++;
  }
  return ans;
};

颠倒二进制位

details
/*
 * 颠倒二进制位
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
var reverseBits = function(n) {
  let ans = 0;
  for (let i = 0; i < 32 && n > 0; ++i) {
    ans |= (n & 1) << (31 - i);
    n >>>= 1;
  }
  return ans >>> 0;
};



/*
 * 颠倒二进制位
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
var reverseBits = function(n) {
  let i = 0;
  let j = 31;
  const ans = new Array(32).fill(0);
  while (i <= j) {
    //依次取出 第 i位
    const right = (n >> i) & 1;
    const left = (n >> j) & 1;
    ans[i] = right;
    ans[j] = left;
    console.log(left, right);
    i++;
    j--;
  }
  console.log(ans.join(''));
  return parseInt(ans.join(''), 2);
};

两整数之和

details
/*
 * 两整数之和
 * @param {number} a
 * @param {number} b
 * @return {number}
 */
var getSum = function(a, b) {
  // 进位 + 非进位
  // 异或可把进位与非进位 相加
  while (a !== 0) {
    const temp = a ^ b;
    // 进位
    a = (a & b) << 1;
    // 非进位
    b = temp;
  }

  return b;
};

Last Updated:
Contributors: rosendo