leetcode 415 字符串相加 JavaScript
这题用JavaScript做还真不太容易,很多需要注意的点
代码如下:
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
let i = num1.length-1;
let j = num2.length-1;
let cur = 0;
let jw = 0;
let res = '';
while(i>=0||j>=0||jw!=0){
if(i >= 0){
cur += num1.charAt(i--) - '0';
}
if(j >= 0){
cur += num2.charAt(j--) - '0';
}
cur += jw;
jw = Math.floor(cur / 10);//更新进位
res += cur % 10;
cur = 0;
}
return res.split('').reverse().join('');
};
思路:
双指针实现每个数对比计算,两个指针初始均指向字符串的最右边,之后进入循环,用cur统计本次计算的值,jw表示进位,res为获取结果
需要注意的点在哪里呢?
①String转Number
②JavaScript的除法和Java不同,它可以返回有小数的值,但我们希望拿到整数位,这里复习一下Math取整的相关api:
Math.round(x) // 四舍五入,Math.round(0.8),得到结果为1;Math.round(0.3),结果为0;
Math.floor(x) // 向下取整,Math.floor(0.8)与Math.floor(0.3),均为0;
Math.ceil(x) //向上取整,Math.ceil(0.8)与Math.ceil(0.3),均为1。
因此获取整数部分使用Math.floor(x),获取到本次循环的进位jw
③最后是将本次循环计算的值cur拼接到res中,直接+=即可。
④拼接完成后获得的字符串res是反的,字符串需要进行反转,使用最经典的
split(’’).reverse().join(’’)快速完成。
split(’’) 表示分割字符串并存放到数组中,括号里的值表示根据’‘分割,比如split(’,’)表示按字符串里面的逗号进行分割,而’‘表示每个字符都分割,最后存入数组。
reverse() 是数组的反转,[1,2,3,4,5]->[5,4,3,2,1];
join(’’) 和split(’’)做的是相反的事情,也就是将数组的所有元素进行拼接,变成字符串。
最后得到相应的结果