给定一个表示非负整数的非空数字数组,将1递增为整数(javascript)

给定一个表示非负整数的非空数字数组,将1递增为整数(javascript),javascript,arrays,iteration,increment,Javascript,Arrays,Iteration,Increment,我想知道是否有人可以解释这个问题的代码解决方案。这对我来说毫无意义: 给定一个表示非负整数的非空数字数组,将1递增为整数 存储数字时,最高有效位位于列表的开头,数组中的每个元素都包含一个数字 您可以假定整数不包含任何前导零,数字0本身除外 解决办法如下: var plusOne = function(digits) { let carry = true for (let i = digits.length - 1; i >= 0; i -= 1) { if

我想知道是否有人可以解释这个问题的代码解决方案。这对我来说毫无意义:

给定一个表示非负整数的非空数字数组,将1递增为整数

存储数字时,最高有效位位于列表的开头,数组中的每个元素都包含一个数字

您可以假定整数不包含任何前导零,数字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;
};
关于此解决方案,我有几个问题:

  • 变量进位的目的是什么
  • 为什么将数字[i]设置为0
  • 为什么有一个if语句检查(i==0)?反过来,为什么之后会添加1

  • 任何指导都将不胜感激,谢谢

    您有一个整数数组,其中数组中的每个元素都表示一个数字的位数。假设你得到456,那么在索引0有4,在索引1有5,在索引2有6

    现在,问题是在给定的数字上加1

    这里的进位是一种数学进位,当你必须加上两个和大于10的数字时使用。默认情况下,我们将“进位”设置为true,因为您仍要向数字中添加1。首先对给定的数字进行迭代(反向),查找等于9的数字(进位为真),然后将当前数字改为零,并将1放在前面。如果进位为真且数字不是9,则只需在数字上加1即可

    示例:

    plusOne([4,9,7])
    (3) [4, 9, 8]
    
    这里给出了数字497,您只需在最后一位数字上加1

    plusOne([1,4,9])
    (3) [1, 5, 0]
    
    plusOne([9,9,9])
    (4) [1, 0, 0, 0]
    
    这里我们看到最后一个数字是9,所以首先我们把它改为零,然后在最后一个数字的第二位加上1

    plusOne([1,4,9])
    (3) [1, 5, 0]
    
    plusOne([9,9,9])
    (4) [1, 0, 0, 0]
    

    这里我们看到所有数字都是9,我们将所有数字都改为零,并在开头加上1(这是使用unshift 1的地方)

    它实现了用铅笔和纸加两个十进制数的基本方法。还记得两个数字对应部分的两个数字加起来超过9吗?你是做什么的?你把10带到下一列数字中。也许在思考你在做什么的时候,可以组成三对或四对随机的4位数字,然后(在纸上)把它们加在一起。这更简单,可以组成一些随机的4位数字,再加上1。@Pointy我明白你在说什么了。不过,我并没有真正理解解离部分。假设数字439-9变为0,我们加1到3就变成440。取消移位将插入数字1,而不是添加到数字。我可能有点不对劲,所以请叫我出来
    .unshift(1)
    只需在结果数组的前面粘贴一个额外的1。当您仅添加一个时,进位不能是除1以外的任何值,因为从一列到下一列“溢出”的唯一方法是将1添加到9。在这种受限的情况下,两个数字的总和永远不会大于10,因为值
    1
    中除最后一个之外的所有数字都是零。所以它所要担心的就是数字
    9
    var plusOne=function(arr){for(让i=arr.length-1;i>=0;i--){if(arr[i]=9{arr[i]=0;if(i==0){arr.unshift(1);}否则if(arr[i]!=9{arr[i]+}return arr}这是我想出的解决方案。你能解释一下为什么这行不通,或者我怎样才能把它改成正确的吗?@NineTails谢谢你的例子,现在取消移位更有意义了