【leetcode】66. 加一

43 阅读1分钟

leetcode-66.png

题目肯定是想要用贴近题意的方式来做

转数字做法

var plusOne = function (digits) {
    let num = BigInt(digits.join(""));
    num += 1n
    return num.toString().split("").map(d => Number(d));
};
  • 大数溢出问题digits 可能非常长(100 位以上),用普通 Number 会精度丢失;

  • 解决方案:用 BigInt,后缀 n 表示大整数;

  • 返回值类型toString().split('') 得到字符串数组,可配合 map(Number) 转回数字数组。

题目想要的解法

遇到9则进位,直到不进位,然后进行return,如果整个都能循环完,那么则说明都是9,则要到最开始加入一个1

var plusOne = function (digits) {
    for (let i = digits.length - 1; i >= 0; --i) {
        if (digits[i] !== 9) {
            digits[i] += 1;
            return digits
        } else {
            digits[i] = 0;
        }
    }
    digits.unshift(1);
    return digits;
};
解法是否简洁是否高效是否贴合题意是否能处理大数
转成字符串 + BigInt✅ 非常简洁❌ 不符合模拟思路✅ 安全处理大数
模拟加法进位稍复杂✅ 高效✅ 符合面试考察点✅ 不依赖语言特性