LeetCode WIith JS || 66. Plus One [数组存储的数据加一]

题目描述:

Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

原题目链接: 66. Plus One

大白话:

给定一个数组存储的大数,计算其加一之后的值

示例输入与输出:

// [0] ==> [1]
// [5, 0] ==> [5, 1]
// [1, 0, 9] ==> [1, 1, 0]
// [1, 9, 9] ==> [2, 0, 0]
// [3, 0, 7, 9] ==> [3, 0, 8, 0]

思路:

用for循环遍历每一位,从最低位开始判断即数组的最后一位

如果判断的当前位不是9,那么正常+1,退出循环;

如果判断的当前位是9,那么当前位归零,开始第二轮循环判断上一位;
如果上一位不是9,那么正常+1(此时是进位的意思) 退出循环;
如果上一位是9,那么归零,开始判断上上位;
……
总结下神马时候能退出循环: 要么当前位不是9 要么需要扩位,除此以外别无其他。

扩位:
999这种就是需要扩位的数,当我们从低位判断到高位,在999的百位9按照上述流程也变为0后,下一步要做的就是扩位变成4位数,且最高位为1.

那么转换为程序语言,我们只需要在再加个最高位是否为零的判断即可

AC代码:

var plusOne = function(digits) {
    for (var i = digits.length - 1; i >= 0; i--) {
        if (digits[i] == 9) {
            digits[i] = 0;
            if (!digits[0]) {//判断加在此处比加在外面效率高些
                digits.unshift(1);
                return digits;
            }
        }
        else {
            digits[i] += 1;
            return digits;
        }

    }
};

AC 代码2:[同样的思路,递归实现]

var plusOne = function(digits) {
   var len = digits.length;
    endPlus(len-1);
    return digits;

    function endPlus (k){
        if(digits[k]==9){
            digits[k]=0;
            if(k===0){
                digits.unshift(1);
            }else{
                endPlus(k-1);
            }
        }else{
            digits[k]++;
        }
    }
};

over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值