【力扣(LeetCode)】 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一

【力扣题库】#66 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

该题目来自力扣题库

测试用例

以下几个测试用例,方便大家写完代码后,测试

[1,2,3] > [1,2,4]
[9] > [1,0]
[9,9,9] > [1,0,0,0]
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] >
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]

思路

如果数组的最后以为不是9,则直接+1即可。所以这里需要重点考虑数字9的情况,比如99,999,9999之类,这样的话+1会进一,数组长度也会增加,变成100,1000等;
我们可以使用循环从后往前看,判断当前数组的元素是数字9的情况。如果不是9,直接加1并且返回数组;如果是9的话让当前位直接变成0,接着循环判断9的情况。
如果是数组元素全部都是9,即[9,9,9,9,9]这种情况,我们可以建立一个新数组,新数组的长度要比输入的数组长度大一位,且第一位是1,后面都是0.

参考代码

var plusOne = function(digits) {

    let len = digits.length;
    // 从后面往前遍历数组,判断9的情况
    for(let i = len-1;i>=0;i--){
        if(digits[i] == 9){
            digits[i] = 0;
        }else{
            digits[i] ++;
            return digits;
        }     
    }
    // 如果全部都是9,建立新的数组
    let newDigits = [1].concat(digits);
    return newDigits;     
};

总结

之前也有想过直接把数组转换成数字,让数字直接+1,然后再转回数组的形式。但是发现对于长度比较大的数字,会出现误差,因为number类型是有长度限制。

以上代码和思路有不合适的地方,还请大家指正,希望于大家共同进步。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章