美文网首页
算法实现两数相加

算法实现两数相加

作者: 夏海峰 | 来源:发表于2019-12-11 13:28 被阅读0次

需求描述:请封装一个add()方法,用于计算两个a->b格式的字符串的和(其中ab都是[0, 9]之间的整数)。

示例演示:比如add('2->4->3', '5->6->4')时返回7->0->8,这个计算的依据是342+465=807

下面我将使用两种方案来封装这个add方法,实现代码参考如下:

# 方案一
var add1 = function($1, $2) {
  // 把‘2->4->3’格式,转化成 342整数
  let num1 = parseInt($1.split('->').reverse().join(''))
  let num2 = parseInt($2.split('->').reverse().join(''))
  // 相加后,把转换成 "a->b->...."格式
  return (num1 + num2).toString().split('').reverse().join('->')
}
# 方案二
var add2 = function($1, $2) {
  // 把‘2->4->3’格式,转换成 '243'字符串
  let num1 = $1.split('->').join('')
  let num2 = $2.split('->').join('')
  // 把 '243'字符串,转换成固定长度的字符串
  let length = Math.max(num1.length, num2.length)
  num1 = num1.padEnd(length, '0')
  num2 = num2.padEnd(length, '0')
  
  // 创建一个长度为 length+1 的数组,并填充 0
  let arr = new Array(length+1)
  arr.fill(0)
  // “和”运算
  arr.map((ele, idx, array)=>{
    array[idx] = parseInt(num1[idx]) + parseInt(num2[idx])
  })
  // 如果某个数组元素满10,就向下一个数组元素上加 1
  arr.map((ele, idx, array)=>{
    if (array[idx] >= 10) {
      array[idx] = ele - 10
      array[idx+1] = arr[idx+1]+1
    }
  })
  // 如果数组的最后一个元素为 0, 就删除这个元素
  if(!arr[length]) arr.splice(length, 1)
  // 返回最终相加后的结果,格式是 'a->b->c->...'
  return arr.join('->')
}

综合对比这两种实现方法,方案一更加快捷,完全符合数学中加法运算规律,代码量较小。方案二,实现思路更贴合常规思维,两数相加满10后向高位进一,但代码量较大,还用到了两次map循环,这个实现思路可以借鉴。

测试一下上述两个方法:

let $1 = '5->3->3->7->9->0->7'
let $2 = '5->6->4'
console.log(add1($1, $2))
console.log(add2($1, $2))

// 打印结果:0->0->8->7->9->0->7

本篇结束!!!

相关文章

  • 算法实现两数相加

    需求描述:请封装一个add()方法,用于计算两个a->b格式的字符串的和(其中a和b都是[0, 9]之间的整数)。...

  • 每日Leetcode—算法(17)

    2.两数相加 算法: 3. 无重复字符的最长子串 算法:

  • [算法题]两数相加

    本文由黑壳博客整理 本文来源[算法题]两数相加 今日总结 不会画画的程序猿不是个好博主 正文 场景问题 上次整理完...

  • OC算法-两数相加

    题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...

  • 算法题:两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 ...

  • LeetCode算法题:两数相加

    需求 两数相加: 思路 链表是倒序存储数值,432 在链表存储是2-3-4,当求和之后,还需将值转成链表,1.根据...

  • 算法之链表 两数相加

    题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...

  • 【算法】2. 两数相加

    题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每...

  • [算法] - leetcode 链表两数相加

    描述 2. 两数相加[https://leetcode-cn.com/problems/add-two-numbe...

  • leetcode算法—两数相加(中等)

    leetcode的两数相加[https://leetcode-cn.com/problems/add-two-nu...

网友评论

      本文标题:算法实现两数相加

      本文链接:https://www.haomeiwen.com/subject/jhuogctx.html