JS算法题之两数相加使用说明_算法题小白基础

题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ->

JS算法题之两数相加使用说明

题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

JS算法题之两数相加使用说明_算法题小白基础

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解答

这题不难,不过稍微有点复杂,涉及到了链表,同时考擦了js大数的运算情况。
先遍历两个链表获得对应的数字,然后相加,最后反推算出结果对应的链表即可。

9;
}
return res.replace(/^0+/, ”);
}

var addTwoNumbers = function(l1, l2) {
let num1 = ”, num2 = ”, cur;
cur = l1;

while(cur){
num1 += cur.val.toString();
cur = cur.next;
}
cur = l2;
while(cur){
num2 += cur.val.toString();
cur = cur.next;
}
num1 = num1.split(”).reverse().join(”);
num2 = num2.split(”).reverse().join(”);

let total;
if(num1.length > 21 || num2.length > 21){
total = addBigNumber(num1, num2)
}
else{
total = Number(num1) + Number(num2)
}

total = total.toLocaleString().toString().split(”).reverse().join(”).replace(/,/g, ”)
console.log(num1, num2, total)

let l3 = ListNode(total[0]);
cur = l3;
for(let i = 1; i

function ListNode(val) {
      this.val = val;
      this.next = null;
    return {
        val: this.val,
        next: null
    }
}

function addBigNumber(a, b) {
  var res = '',
    temp = 0;
  a = a.split('');
  b = b.split('');
  while (a.length || b.length || temp) {
    temp += ~~a.pop() + ~~b.pop();
    res = (temp % 10) + res;
    temp = temp > 9;
  }
  return res.replace(/^0+/, '');
}

var addTwoNumbers = function(l1, l2) {
    let num1 = '', num2 = '', cur;
    cur = l1;

    while(cur){
        num1 += cur.val.toString();
        cur = cur.next;
    }
    cur = l2;
    while(cur){
        num2 += cur.val.toString();
        cur = cur.next;
    }
    num1 = num1.split('').reverse().join('');
    num2 = num2.split('').reverse().join('');
    
    let total;
    if(num1.length > 21 || num2.length > 21){
        total = addBigNumber(num1, num2)
    }
    else{
        total = Number(num1) + Number(num2)
    }

    total = total.toLocaleString().toString().split('').reverse().join('').replace(/,/g, '')
    console.log(num1, num2, total)
    
    let l3 = ListNode(total[0]);
    cur = l3;
    for(let i = 1; i < total.length; i++){
        let node = ListNode(total[i]);
        cur.next = node;
        cur = node;
    }

    return l3;
};
海计划公众号
(0)
上一篇 2020/03/29 01:41
下一篇 2020/03/29 01:41

您可能感兴趣的内容