题目肯定是想要用贴近题意的方式来做
转数字做法
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 | ✅ 非常简洁 | ✅ | ❌ 不符合模拟思路 | ✅ 安全处理大数 |
| 模拟加法进位 | 稍复杂 | ✅ 高效 | ✅ 符合面试考察点 | ✅ 不依赖语言特性 |