leetcode 415 字符串相加 JavaScript

leetcode 415 字符串相加 JavaScript
leetcode 415 字符串相加 JavaScript_第1张图片

这题用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(’’)做的是相反的事情,也就是将数组的所有元素进行拼接,变成字符串。
最后得到相应的结果
leetcode 415 字符串相加 JavaScript_第2张图片

你可能感兴趣的:(JavaScript)