xuqi

2023-11-12

Leet Code:知识与心得

Table of Contents

1. 概述

Leet Code 是很多涉及到编程的工作面试中用来衡量基本编程能力的一套实操习题。我做的是 freecodecamp 的版本,这个版本使用 JavaScript 作为编程语言。

做完的答案保存在 Github Gist

2. 算法

2.1. 💬 质数

初期的不少题目要用到确定一个数是否是质数,或者找到一个数的质因数的运算。确定输入 num 是否为质数的标准答案:

const isPrime = num => {
    for(let i = 2, s = Math.sqrt(num); i <= s; i++) {
        if(num % i === 0) return false;
    }
    return num > 1;
}

// Source: https://stackoverflow.com/a/40200710

质因数的分解也有不少答案了,随便搜索一下就是一大堆,这里就不重复这些信息了。

2.2. 💬 大数相加

不少题目会用到累加的操作,因为数字增大得很快,如果直接用 JS 的加法会由于精度位数不够而得不到正确答案。解决方法是把数字转成字符串数组,逐位相加。

function digitAdd(n1, n2) {
  let res = [];
  let overflow = 0;

  let diffLen = n1.length - n2.length;
  if (diffLen < 0) n1 = Array(diffLen).fill('0').concat(n1);
  if (diffLen > 0) n2 = Array(diffLen).fill('0').concat(n2);

  let len = n1.length;
  for (let i = len - 1; i >= 0; i--) {
    let sum = Number(n1[i]) + Number(n2[i]) + overflow;
    overflow = Math.floor(sum / 10);
    res.unshift(String(sum % 10));
  };

  if (overflow != 0) res.unshift(String(overflow));
  return res;
}

注意这个函数给出的结果仍然是个数组,可以用 join() 方法转成字符串然后再做类型转换或者输出。

3. 语言特性