2022.02.21

讲讲过往的项目

性能优化

组件库的设计

chrome v8 的垃圾回收

chrome/v8 引擎垃圾回收机制

输入一串 URL 到页面输出 经历了什么

从输入网址后发生了什么

两个大数相加

const addStrings = (num1, num2, base = 10) => {
  // 结果
  let result = "";
  // 进位标记
  let carry = 0;
  // 设置 a、b 的长度,方便逆序遍历
  let num1Index = num1.length - 1,
    num2Index = num2.length - 1;
  while (num1Index >= 0 || num2Index >= 0) {
    // num1 或 num2 还有位可以相加
    // num1Index bIndex可能为负数值,需要转化为 0
    sum = (+num1[num1Index] || 0) + (+num2[num2Index] || 0) + carry;
    // 是否需要进位
    carry = sum >= base ? 1 : 0;
    // 计算最终结果
    result = (sum % base) + result;
    // 移位后往更高位靠
    num1Index--;
    num2Index--;
  }
  // 如果计算完毕后还有进位,那么前面 + 1
  if (carry) {
    result = "1" + result;
  }
  // 返回最终结果
  return result;
};
  1. 先取两个字符串中最大的长度

  2. 短的那个前面补 0 以保证两者对齐

  3. 写个 for 循环, 从后往前逐位加和, 注意如果加和 >= 10, 说明要进位, 记 carry 为 1

  4. 最后循环完了, 如果发现 carry 还是 1, 说明最后一次加和仍然要进位, 那就在最前面补个 1 即可

回文数

链表回环

最后更新于