草庐IT

Leetcode 2 两数相加

LeonYi 2023-03-28 原文

一、题目

  给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

  可以假设除了数字 0 之外,这两个数都不会以 0 开头。

  示例 1:

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.

二、解法

  以逆序链表的方式存储数字,非常适合于两数相加。这时候,链表头代表数字的最低位,只需从头向尾遍历,依次相加进位即可。

       以最短的数的链表为终点,然后再将较长的数的后续位加入新的链表中。

  Python版:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        upper_val = 0
        dummy = ListNode(0)
        cur = dummy
        while l1 and l2:
            value = l1.val + l2.val + upper_val
            upper_val = value // 10
            tmp_node = ListNode(value % 10)
            cur.next = tmp_node
            cur = tmp_node
            l1, l2 = l1.next, l2.next

        remain_l = l1 if l1 else l2
        while remain_l:
            value = remain_l.val + upper_val
            upper_val = value // 10
            tmp_node = ListNode(value % 10)
            cur.next = tmp_node
            cur = tmp_node
            remain_l = remain_l.next

        if upper_val > 0:
            tmp_node = ListNode(upper_val)
            cur.next = tmp_node

        return dummy.next

       C语言版:

# include <stdlib.h>

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* l = NULL;
    struct ListNode* cur = NULL;
    // struct ListNode* tmp = NULL;
    l = malloc(sizeof(struct ListNode));
    l->val = 0;
    l->next = NULL;
    cur = l;

    int value = 0;
    int upperVal = 0;
    while (l1 != NULL && l2 != NULL) {
        value = l1->val + l2->val + upperVal;
        upperVal = value / 10;
        value = value % 10;
        
        struct ListNode* tmp_node = malloc(sizeof(struct ListNode));
        tmp_node->val = value;
        tmp_node->next = NULL;
        cur->next = tmp_node; 
        cur = cur->next;

        l1 = l1->next;
        l2 = l2->next;
    }

    if (l1 == NULL) {
        while (l2 != NULL ) {
            value = l2->val + upperVal;
            upperVal = value / 10;
            l2->val = value % 10;
            cur->next = l2; 
            cur = cur->next;
            l2 = l2->next;
        } 
    }
    if (l2 == NULL) {
        while (l1 != NULL ) {
            value = l1->val + upperVal;
            upperVal = value / 10;
            l1->val = value % 10;
            cur->next = l1; 
            cur = cur->next;
            l1 = l1->next;
        } 
    } 
    if (upperVal > 0) {
        struct ListNode* node = malloc(sizeof(struct ListNode));
        node->val = upperVal;
        node->next = NULL;
        cur->next = node;
    } 
    return l->next;
}

有关Leetcode 2 两数相加的更多相关文章

  1. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

  2. IDEA使用LeetCode插件 - 2

    前言我们习惯用idea编写、调试代码,在LeetCode上刷题时,如果能够在IDEA编写代码,并且做好代码管理,是一件事半功倍的事情。对于后续复习题目,做笔记也会非常便利。本文目的在于介绍LeetCodeEditor的使用,以及配置工具类,最终目录结构如下:note:放置笔记src:放置代码leetcode.editor.cn:插件LeetCodeEditor自动生成utils:自定义的工具包,可用于自动化输入测试用例,定义题目需要的类(结构体)out:运行测试时自动生成LeetCodeEditorGitHub:https://github.com/shuzijun/leetcode-edit

  3. 【算法题解】20. 两数之和 - 2

    这是一道简单题题目来自:https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示:22nums.length104−109−109nums[i]109−109−109target109只会存在一个有效答案进阶:你可以想出一个时间复杂度小于O(n2)O(n^2)O(n2)的算法吗?示例1:输入:nums=[2,7,11,15],targe

  4. LeetCode——2347. 最好的扑克手牌 - 2

    一、题目给你一个整数数组ranks和一个字符数组suit。你有5张扑克牌,第i张牌大小为ranks[i],花色为suits[i]。下述是从好到坏你可能持有的手牌类型:“Flush”:同花,五张相同花色的扑克牌。“ThreeofaKind”:三条,有3张大小相同的扑克牌。“Pair”:对子,两张大小一样的扑克牌。“HighCard”:高牌,五张大小互不相同的扑克牌。请你返回一个字符串,表示给定的5张牌中,你能组成的最好手牌类型。注意:返回的字符串大小写需与题目描述相同。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/best-poker-hand/d

  5. LeetCode:344. 反转字符串 - 2

    🍎道阻且长,行则将至。🍓🌻算法,不如说它是一种思考方式🍀算法专栏:👉🏻123一、🌱344.反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。来源:力扣(LeetCode)难度:简单提示:1s[i]都是ASCII码表中的可打印字符示例1:输入:s=[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2:输入:s=[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”

  6. 【日常系列】LeetCode《28·动态规划3》 - 2

    数据规模->时间复杂度10^8内容二维数组中的路径问题买卖股票的最佳时机lc62【剑指098】【top100】:不同路径https://leetcode.cn/problems/unique-paths/提示:1题目数据保证答案小于等于2*10^9#方案一:dfs+记忆化classSolution:defuniquePaths(self,m:int,n:int)->int:memo=[[-1]*nfor_inrange(m)]defdfs(i,j):ifi==m-1andj==n-1:return1ifi>=morj>=n:return0ifmemo[i][j]!=-1:returnmemo[

  7. LeetCode:454. 四数相加 II —— 哈希表为什么叫哈希表~ - 2

    🍎道阻且长,行则将至。🍓🌻算法,不如说它是一种思考方式🍀算法专栏:👉🏻123hash是什么,哈希表为什么叫哈希表?一、🌱454.四数相加II题目描述:给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0nums1[i]+nums2[j]+nums3[k]+nums4[l]==0来源:力扣(LeetCode)难度:中等提示:n==nums1.lengthn==nums2.lengthn==nums3.lengthn==nums4.length1-2^28示例1:输入:nums1=[1,2],nums2=[-2,-1],n

  8. javascript - 将两个整数之间的所有数字相加 - 2

    目标给定一个数组中的两个数字,求和所有数字,包括(和介于两个整数之间)(例如[4,2]->2+3+4=9)。我已经设法解决了这个问题,但想知道是否有更优雅的解决方案(尤其是使用Math.max和Math.min)-请参阅下面的更多问题...我的解决方案//arrangearrayforlowesttohighestnumberfunctionorder(min,max){returnmin-max;}functionsumAll(arr){varlist=arr.sort(order);vara=list[0];//smallestnumbervarb=list[1];//larges

  9. javascript - 如何将两个数字相加? - 2

    我写了一个JavaScript计算器...但是假设当我将第一个数字作为2并将第二个数字作为3时,结果显示23,但我想将这两个数字相加。谁能帮帮我?当我尝试减去这两个数字时也会发生这种情况。为什么这不起作用?varcal=prompt("Pleaseenterwhattypeofcalculationyouwanttodo\nifyouwannaaddenter=1\nifyouwanttominusenter=2\nifyouwanttodivideenter=3\nifyouwanttomultiplyenter=4");if(cal==1){vara=prompt("Pleasee

  10. 【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ - 2

     Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。🌈个人主页:主页链接🌈算法专栏:专栏链接     我会一直往里填充内容哒!🌈LeetCode专栏:专栏链接     目前在刷初级算法的LeetBook。若每日一题当中有力所能及的题目,也会当天做完发出🌈代码仓库:Gitee链接🌈点击关注=收获更多优质内容🌈目录题目:111. 二叉树的最小深度题解:代码实现:题目:700. 二叉搜索树中的搜索题解:代码实现:题目:701. 二叉搜索树中的插入操作题解:代码实现:题目:450. 删除二叉搜索树中的节点题解:代码实现:完结撒花:人生苦短,

随机推荐