2.LeetCode-两数相加(javascript)

题目

来自力扣

  • 这里的示例好像有问题,并不是反序,就是正常顺序。如图说是,应该就是243 + 564 = 708;

解题1:傻瓜式无脑操作

var addTwoNumbers = function(l1, l2) {
   const list1 = [];
    const list2 = [];
    const list3 = [];
    const res = {}
    while (l1) {
        list1.push(l1.val)
        l1 = l1.next;
    }
     while (l2) {
        list2.push(l2.val)
        l2 = l2.next;
    }
    let i = 0;
    while (1) {
        if (list1[i] === undefined && list2[i] === undefined) {
            break;
        }
        let t = (list1[i] || 0) + (list2[i] || 0) + (list3[i] || 0);
        if (t > 9) {
            list3[i] = t - 10;
            list3[i+1] = 1;
        } else {
            list3[i] = t;
        }
        i = i+1;
    }
    let p = res;
    for (j in list3) {
        p.val = list3[j];
        p.next = j == list3.length - 1? null: {};
        
        p = p.next;
    }
    return res;
};
  • 时间长,效率低,内存耗费高,后面慢慢改
  • 打印了一下返回值,输出是这样子的,用对象模拟的链表。
  • 中间出现了一些问题,如在判断数组当前下标是否有值,不能直接用 if (!list[i]), 因为极有可能,当前有值,但是值为0,这样子会造成判断错误。所以用if判断的时候,一定要注意,思考是否有等于0的情况,因为0是会被认为成 false 的。
    在这里插入图片描述

解题2:稍微优化了一下:

    const list = {};
    let t = 0;
    let p = list;
    while (l1 || l2 || t) {
        let k = (l1?.val || 0) + (l2?.val || 0) + t;
        p.val = k % 10;
        t = k > 9? 1: 0;
        l1 = l1? l1.next: null;
        l2 = l2? l2.next: null;
        p.next = (l1 || l2 || t)? {}: null;
        p = p.next;
    }
    return list;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值