栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【JS/TS算法系列】LeetCode题解2-两数相加

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JS/TS算法系列】LeetCode题解2-两数相加

LeetCode题解2-两数相加 踩过的坑
既往写C语言算法时,去除整数的最低位习惯使用直接除,比如88/10=8,而js的number是浮点数,所以要注意这个时候要做一个取整操作。Math.floor
条件反射的方法(错误):暴力取和 思路

将两个链表转化成整数,相加后再把结果转换成链表
此思路比较直接,但有一个比较严重的问题是:JS的数字只有number类型//todo check对不对,且长度只有64位,表达范围有限。此题最后几个用例的数字链表非常长,也就是说此场景不适用。


function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
    let l1Number = l1.val, l2Number = l2.val, pointer = l1.next;
    let i = 1;
    while(pointer) {
        l1Number = l1Number + pointer.val * Math.pow(10, i);
        pointer = pointer.next;
        i++;
    }
    pointer = l2.next;
    i = 1;
    while(pointer) {
        l2Number = l2Number + pointer.val * Math.pow(10, i);
        pointer = pointer.next;
        i++;
    }
    const resultNumber = l1Number + l2Number;
    return getListNodeFromNumber(resultNumber);
};

function getListNodeFromNumber(number: number): ListNode {
    const pointer = new ListNode();
    pointer.val = number % 10;
    if(number >= 10) {
        pointer.next = getListNodeFromNumber(Math.floor(number/10));
    }
    return pointer;
}
方法一:递归 思路

直接通过递归方法,将两链表从起始位置开始按位相加,如果相加后>=10,那么下一位相加结果再加一(数学上两个数取和其实就是这样算)。当其中一个链表已经遍历完全部时剩余位数直接取更长的那个链表的值。此处要注意一个点,遍历结束后有可能继续进位,也就是说结果链表的长度=l1、l2中更长的链表的长度或l1、l2中更长的链表的长度+1。


function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
    return loops(false, l1, l2);
};

function loops(carry: boolean, p1: ListNode, p2: ListNode): ListNode {
    const pointer = new ListNode();
    pointer.val = (p1?.val || 0) + (p2?.val || 0);
    if (carry) {
        pointer.val++;
        carry = false;
    }
    if (pointer.val >= 10) {
        carry = true;
        pointer.val = pointer.val%10;
    }
    if (p1?.next || p2?.next || carry) { // 注意   carray  如果Carray为true应该再进一位
        pointer.next = loops(carry, p1?.next, p2?.next);
    }
    return pointer;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号