【发布时间】:2020-09-29 03:41:51
【问题描述】:
想知道是否有人可以解释此问题的代码解决方案。这对我来说毫无意义:
给定一个表示非负整数的非空数字数组,将整数加一。
存储数字时,最高有效位位于列表的开头,并且数组中的每个元素都包含一个数字。
您可以假设整数不包含任何前导零,除了数字 0 本身。
解决方法如下:
var plusOne = function(digits) {
let carry = true
for (let i = digits.length - 1; i >= 0; i -= 1) {
if (digits[i] === 9 && carry) {
digits[i] = 0;
if (i === 0) {
digits.unshift(1);
break;
}
} else if (carry) {
digits[i] += 1;
carry = false;
}
}
return digits;
};
我对这个解决方案有几个问题:
- 变量进位的目的是什么?
- 为什么digits[i]设置为0?
- 为什么有一个 if 语句检查 (i===0)?反过来,为什么后面加了一个 1?
任何指导将不胜感激,谢谢!!
【问题讨论】:
-
它实现了用铅笔和纸将两个十进制数相加的基本方法。还记得两个数字对应部分的两位数字加起来超过 9 的情况吗?你做什么工作?你携带 10 到下一列数字。
-
也许可以组成三对或四对随机的 4 位数字,然后将它们加在一起(在纸上),同时考虑你在做什么。
-
这更简单,组成一些随机的 4 位数字并加 1。
-
@Pointy 我明白你在说什么。不过,我并没有真正得到 unshift(1) 部分。假设数字 439 - 9 变为 0,我们将 1 加到 3 变为 440。Unshift 插入数字 1 而不是添加到数字。我这里可能有问题,所以请叫我出来!
-
.unshift(1)只是在结果数组的前面加上一个额外的 1。当你只是加一时,进位不能是 1 以外的任何值,因为从一列“溢出”到下一列的唯一方法是将 1 加到 9。
标签: javascript arrays iteration increment