问题:加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 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...
网友评论