Leetcode 数组--加一

问题:加一

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

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

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

示例1:

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

示例2:

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

这道题我一开始看的时候很懵逼,这是啥意思呀,后来才明白,就是一个数字加一的事儿,像上面两个的意思是,数组[1,2,3]表示数123,念一百二十三,在数字上加一就是124,表示成数组就是[1,2,4],那数组是[4,3,2,1]表示的数是4321,四千三百二十一,以此类推,数组[9,9,9]就是九百九十九了,9+1=10,逢十进一,这个就是这道题的关键了。
下面看我的答题:

let numberss = [9,9,9,9,9,9,9];

const plusOnes = (numbers,one)=>{
    let obj = {
        add:one,
        result:[],
    };

    let result = numbers.reduceRight((obj,num,index)=>{
        let add = obj.add;
        let result = obj.result;
        //加1
        let add_result = add+num;
        if(add_result>=10){
            let arr = add_result.toString().split("");
            obj.add = 1;
            obj.result = [parseInt(arr[1]),...result];
            console.log(index);
            if(index === 0){
                obj.result =[1,...obj.result];
            }
        }else{
            obj.add = 0;
            obj.result = [add_result,...obj.result];
        }
        return obj;

    },obj);

    return result.result;
};
plusOnes(numberss,1);

这里主要是用到了javascript的高阶函数,reduceRight,它的作用是从数组的右侧开始遍历,每一次返回的数据都会重新传入到函数中,直接遍历完成为止。
Over...

你可能感兴趣的:(Leetcode 数组--加一)