小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
嗨!~ 大家好,我是YK菌 🐷 ,一个微系前端 ✨,喜欢分享自己学到的小知识 🏹,欢迎关注我呀 😘 ~ [微信号: yk2012yk2012,微信公众号:ykyk2012]
之前我们做了一题字符串相加,今天这题就是变成数组了,思想都是一样的,但是我们这里最后来一个巧妙的方法,看你能不能想到呢?
989. 数组形式的整数加法
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
链接:leetcode-cn.com/problems/ad…
【解法一】模拟加法
/**
* @param {number[]} num
* @param {number} k
* @return {number[]}
*/
var addToArrayForm = function(num, k) {
let result = []
let len = num.length
let add = 0
for(let i = len - 1; i >= 0; i--){
let sum = num[i] + k % 10 + add
add = Math.floor(sum / 10)
sum = sum % 10
result[i] = sum
k = Math.floor(k/10)
}
if(add === 1){
result.unshift(1)
}
if(k > 0){
if(add ===1){
result.shift()
k = k + 1
}
while(k > 0){
result.unshift(k % 10)
k = Math.floor(k / 10)
}
}
return result
};
之前我们也说过 push+reverse的操作要比unshift效率高~ 【LeetCode】字符串相加 - JavaScript的数组中unshift与push的效率对比
var addToArrayForm = function(num, k) {
let result = []
let len = num.length
for(let i = len - 1; i >= 0; i--){
let sum = num[i] + k % 10
k = Math.floor(k/10)
if(sum >= 10){
k++
sum -= 10
}
result.push(sum)
}
while(k > 0){
result.push(k % 10)
k = Math.floor(k/10)
}
result.reverse()
return result
};
【解法二】巧妙解法
直接将数组中的数字加到k上来,然后将k的个位加到结果数组中
var addToArrayForm = function(num, k) {
let result = []
let len = num.length
for(let i = len - 1; i >= 0 || k > 0; i--, k = Math.floor(k/10)){
if(i >= 0){
k += num[i]
}
result.push(k % 10)
}
result.reverse()
return result
};