今日算法题:字符串相加

文章讨论了在JavaScript中处理超出Number类型范围的大整数加法问题,介绍了三种方法:常规parseInt、使用BigInt库和双指针模拟加法。着重讲解了为何常规方法会失真,并提供了不使用BigInt的第三种解决方案。
摘要由CSDN通过智能技术生成

题目:(来源于力扣)

 思路:

1、将两个字符串num1,num2转化为number型,进行加法运算后再转为String

2、利用处理大整数的库BigInt

3、模拟两数相加的过程

代码:

第一种思路

var addStrings = function(num1, num2) {
      let result1 = parseInt(num1)
      let result2 = parseInt(num2)
      return( result1+result2).toString();
}

提交后报错:

 这是什么原因呢?

是因为js中的Number在 -2^53 + 1 到 2^53 - 1 范围内可以正常表示,但不在这是范围时会失真

 而9333852702227987超出了范围

第二种思路

var addStrings = function(num1, num2) {
      return (BigInt(num1) + BigInt(num2)).toString();
}

通过,但是题目中不允许用BigInt 

第三种思路:

只需要对两个整数模拟加法的过程。借助双指针,定义两个指针 i 和 j 分别指向 num1和num2的末尾,同时定义一个变量 jw维护当前是否有进位,然后从末尾到开头逐位相加将结果追加到一个数组中,最后倒序再转字符串即可。

 

var addStrings = function(num1, num2) {
  let i = num1.length -1;
  let j = num2.length -1;
//   标志进位
  let jw = 0;
  let arr = [];
  while(i>=0||j>=0||jw==1){
//     利用'-'运算符将num1和num2转化为数字
    const top = num1.charAt(i) - 0;
    const bottom = num2.charAt(j) - 0;
    let result = top + bottom + jw;
//     将上下两位相加的结果与10比较,判断是否要进位
    if(result >= 10){
        arr.push(result - 10)
      //  有进位
        jw = 1;
    }else{
      arr.push(result);
      // 没有进位
      jw = 0;
    }
    i--;
    j--;
  }
//   将arr数组倒序后再转化为字符串
  return arr.reverse().join('');
};

这里注意:while循环中要加入jw==1的情况,防止以下这种情况 result = 10,jw =1,但是由于 i 和j都小于0,所以不进入循环,结果只有0

你是不是迫不及待去一展拳脚啦~~~

 题目链接:https://leetcode.cn/tag/string/problemset/  里面的字符串相加

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值