415. 字符串相加

415. 字符串相加
在这里插入图片描述
算法流程:设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;

  • 计算进位: 计算 carry = tmp / 10,代表当前位相加是否产生进位;
  • 添加当前位: 计算 tmp = n1 + n2 + carry,并将当前位 tmp % 10 添加至 res 头部;
  • 索引溢出处理: 当指针 i或j 走过数字首部后,给 n1,n2 赋值为 0,相当于给 num1,num2 中长度较短的数字前面填 0,以便后续计算。
  • 当遍历完 num1,num2 后跳出循环,并根据 carry 值决定是否在头部添加进位 11,最终返回 res 即可。
    复杂度分析:

时间复杂度O(max(M,N)):其中 M,N为 22 数字长度,按位遍历一遍数字(以较长的数字为准);
空间复杂度 O(1):指针与变量使用常数大小空间。
在这里插入图片描述

 var addStrings = function(num1, num2) {
    let res = "",
            i = num1.length-1,j = num2.length-1,carry = 0;
    while(i>=0 || j >= 0){
      let p = i>=0 ? num1[i]-0 : 0;
      let q = j>=0 ? num2[j]-0 : 0;
      let sum = q+p+carry;
      carry = Math.floor(sum/10);
      res = String(sum%10) + res;
      j--;
      i--
    }
    return carry !== 0 ? "1"+res : res;
  };
  console.log(addStrings("11", "123"));
先存放在数组中,然后转成字符串
function solve( num1 ,  num2 ) {
    // write code here
    let res = [],
    i = num1.length-1,j = num2.length-1,carry = 0;
    while(i>=0 || j >= 0 || carry !== 0){
        let p = i>=0 ? num1[i]-0 : 0;
        let q = j>=0 ? num2[j]-0 : 0;
        let sum = q+p+carry;
        let cur = sum % 10;
        res.push(cur);
        carry = Math.floor(sum/10);
        j--;
        i--
    }
    return res.reverse().join("")

}
module.exports = {
    solve : solve
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值