今日算法题:字符串相加

题目:(来源于力扣)

 思路:

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/  里面的字符串相加

猜你喜欢

转载自blog.csdn.net/weixin_53141315/article/details/132524441
今日推荐