小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
今天来一道常考题字符串相加,我在好几场面试中都遇到了,比如度小满、好未来等
415. 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ad…
题解
思路就是 字符串从后向前遍历,然后模拟加法运算就可以了
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
let add = 0
let i = num1.length - 1
let j = num2.length - 1
let result = []
while(i >= 0 || j >= 0 || add !== 0){
let x = num1[i] ? +num1[i] : 0
let y = num2[j] ? +num2[j] : 0
let res = x + y + add
// result.unshift(res % 10)
result.push(res % 10)
add = ~~(res / 10)
i--
j--
}
// return result.join('')
return result.reverse().join('')
};
注意,这里不使用 unshift
而是使用 push
+ reverse
是效率的考量才这样的
unshift与push的效率对比
最后,我们简单测试一下JavaScript中unshift
与push
的效率
let arr = [];
let start = new Date();
for (let i = 0; i < 100000; i++) {
arr.push(i);
}
console.log(`push耗时:${new Date() - start}`);
arr = [];
start = new Date();
for (let i = 0; i < 100000; i++) {
arr.unshift(i);
}
console.log(`unshift耗时:${new Date() - start}`);
node环境下测试
浏览器环境下测试