【每日一题】445. 两数相加 II

这篇具有很好参考价值的文章主要介绍了【每日一题】445. 两数相加 II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

445. 两数相加 II

题目描述

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

示例1:
【每日一题】445. 两数相加 II,每日一题,面试,算法,职场和发展

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

提示:

链表的长度范围为 [1, 100]
0 <= node.val <= 9
输入数据保证链表代表的数字无前导 0

进阶:如果输入链表不能翻转该如何解决?

解题思路

思路:栈+竖式加法。分别使用栈st1、st2存储链表1、2元素,使用sum表示当前和,使用add表示进位,使用cur表示当前位。首先是两个指针均不为空时的处理,接着是两个指针两者之一为空时的处理,最后要注意残留add时的处理。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //既然链表正序存储 那么就使用栈来存储 利用栈先进后出的性质
        stack<int> st1,st2;
        while(l1)
        {
            st1.push(l1->val);
            l1=l1->next;
        }
        while(l2)
        {
            st2.push(l2->val);
            l2=l2->next;
        }
        //剩下的本质上和2一样
        int sum;
        int cur;
        int add=0;
        ListNode* L=new ListNode();
        while(!st1.empty()&&!st2.empty())
        {
            sum=(st1.top()+st2.top()+add);
            cur=sum%10;
            add=sum/10;
            ListNode* temp=new ListNode(cur);
            temp->next=L->next;
            L->next=temp;
            st1.pop();
            st2.pop();
        }
        while(!st1.empty())
        {
            sum=(st1.top()+add);
            cur=sum%10;
            add=sum/10;
            ListNode* temp=new ListNode(cur);
            temp->next=L->next;
            L->next=temp;
            st1.pop();
        }
        while(!st2.empty())
        {
            sum=(st2.top()+add);
            cur=sum%10;
            add=sum/10;
            ListNode* temp=new ListNode(cur);
            temp->next=L->next;
            L->next=temp;
            st2.pop();
        }
        if(add)
        {
            ListNode* temp=new ListNode(add);
            temp->next=L->next;
            L->next=temp;
        }
        return L->next;
    }
};

总结:两数相加II和两数相加的唯一区别在于,两数相加中的数是逆序存储,而两数相加II中的数是正序存储。两数相加的直观思维是竖式加法,而竖式加法正好满足逆序,现在既然是正序,那么就可以考虑如何将正序转换为逆序,此时正好利用栈结构的特性即可。

代码可能稍显冗余,但是思路较为清晰。文章来源地址https://www.toymoban.com/news/detail-516548.html

到了这里,关于【每日一题】445. 两数相加 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode每日一题:167. 两数之和 II - 输入有序数组(2023.7.8 C++)

    目录 167. 两数之和 II - 输入有序数组 题目描述: 实现代码与解析: 暴力(超时) 双指针 原理思路: 二分 原理思路:         给你一个下标从  1  开始的整数数组  numbers  ,该数组已按   非递减顺序排列   ,请你从数组中找出满足相加之和等于目标数  target  的两

    2024年02月13日
    浏览(38)
  • leetcode每日一题——45.跳跃游戏II(面试经典150题)

    45. 跳跃游戏 II - 力扣(LeetCode) 给定一个长度为 n 的 0 索引 整数数组 nums。 初始位置为 nums[0] 。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:   0 = j = nums[i]     i + j n 返回到达 nums[n - 1] 的最小跳跃次数

    2024年02月13日
    浏览(32)
  • 【力扣每日一题01】两数之和

    开了一个新专栏,用来记录自己每天刷题,并且也是为了养成每日学习这个习惯,期待坚持一年后的自己! 给定一个整数数组  nums  和一个整数目标值  target ,请你在该数组中找出  和为目标值  target   的那  两个  整数,并返回它们的数组下标。 你可以假设每种输入只

    2024年02月10日
    浏览(36)
  • LeetCode算法题---两数相加(二)

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1:   示例 2: 示例

    2024年02月09日
    浏览(33)
  • 【算法Hot100系列】两数相加

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月04日
    浏览(32)
  • LeetCode·每日一题·415. 字符串相加·模拟

    作者:小迅 链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   题意 - 给定二个字符串,计算它们的和并同样以字符串形式返回。 直接从

    2024年02月16日
    浏览(31)
  • 【力扣每日一题】2023.7.17 字符串相加

    题面很简单,就是要将两个字符串看作是数字然后相加,将最后结果转为字符串返回即可. 看到这题我的第一反应是直接转成数字再相加再转成字符串,像是这样: 但这样就不符合题目要求了( 这不是主要原因 ) ,并且遇到大数就无法转成整型也无法计算了. 所以需要像是我们列竖式

    2024年02月16日
    浏览(25)
  • 【算法】Add Two Numbers 两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 每个链表中的节点数在范围

    2024年02月11日
    浏览(38)
  • LeetCode 算法 2.两数相加(python版)

    给你两个 非空 的链表,表示两个非负的整数。 它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    2024年01月21日
    浏览(28)
  • 2023/07/01_leetcode每日一题_1. 两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 一开始审错题了,还以

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包