力扣每日一题——两数相加II
发现做的题难度始终不高,今天Leecode给了一个稍微难一点的题目。(前两天没更是因为去拔牙了~~>_<~~)
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
输入: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]来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers-ii
该问题本质是链表加法问题,它实现了将两个链表表示的数字相加的功能。具体解决方法如下:
首先创建两个空向量L1
和L2
,用于存储链表中的数字。然后通过遍历链表,将链表中的数字依次存入相应的向量中。
接下来,代码获取了两个向量的大小,并创建一些变量来辅助计算;然后,根据两个向量的大小关系,分别处理不同的情况:
- 如果
L1
的大小大于等于L2
的大小,那么从右向左遍历两个向量,并进行加法运算:如果两个数字相加结果大于等于10,则需要进位。代码通过创建新节点,并将其连到结果链表的头部,来表示相加的结果; - 如果L2的大小小于L1的大小,先按上面的方法处理L2长度的部分;接着,处理在
L1
中剩余的数字。对于像L2
中没有的部分,只需要对数字进行加法运算,并进行进位处理;最后,如果最高位的计算结果有进位,需要创建一个新节点来表示进位的结果。 - 如果
L2
的大小大于L1
的大小,那么处理方式与上述相同,只是将L1
和L2
的角色互换。最后,将结果链表返回。
整体上,解决方案实现了链表加法的功能,通过遍历链表中的数字,进行逐位相加,并处理进位的情况,最终得到新链表表示的相加结果。代码如下:
/*** 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) {vector<int> L1,L2;if(l1==NULL) return l2;if(l2==NULL) return l1;while(l1!=NULL){L1.push_back(l1->val);l1=l1->next;}while(l2!=NULL){L2.push_back(l2->val);l2=l2->next;}int size1=L1.size();int size2=L2.size();ListNode* L,*temp;if(size1>=size2){int flag=0,offset=size1-size2,num;L=NULL;for(int i=size2-1;i>=0;i--){num=L1[i+offset]+L2[i]+flag;if(num>=10){num-=10;flag=1;}else flag=0;temp=new ListNode;temp->val=num;temp->next=L;L=temp;}for(int i=offset-1;i>=0;i--){num=L1[i]+flag;if(num>=10){num-=10;flag=1;}else flag=0;temp=new ListNode;temp->val=num;temp->next=L;L=temp;}if(flag==1){temp=new ListNode;temp->val=1;temp->next=L;L=temp;}}else{int flag=0,offset=size2-size1,num;L=NULL;for(int i=size1-1;i>=0;i--){num=L2[i+offset]+L1[i]+flag;if(num>=10){num-=10;flag=1;}else flag=0;temp=new ListNode;temp->val=num;temp->next=L;L=temp;}for(int i=offset-1;i>=0;i--){num=L2[i]+flag;if(num>=10){num-=10;flag=1;}else flag=0;temp=new ListNode;temp->val=num;temp->next=L;L=temp;}if(flag==1){temp=new ListNode;temp->val=1;temp->next=L;L=temp;}}return L;}
};
匆忙结束~拜拜~
力扣每日一题——两数相加II相关推荐
- 力扣第454题.四数相加II(JavaScript)
首先定义 一个map,key放a和b两数之和,value 放a和b两数之和出现的次数. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中. 定义变量count,用来统计 a+b+c ...
- 力扣热门100题——两数之和(最全解法)
1.两数之和 1.问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
- leetcode算法题--两数相加 II
原题链接:https://leetcode-cn.com/problems/add-two-numbers-ii/ 栈 ListNode* addTwoNumbers(ListNode* l1, Li ...
- 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)
目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...
- 【爬虫】力扣每日一题每天自动邮件提醒!!!
使用python实现了一个力扣每日一题每天自动邮件提醒的小爬虫,小但实用!!! 文章目录 A.需求来源与分析 B.技术角度分析 C.具体分析步骤 1.接口协议分析 2.发邮件 3.写crontab放服 ...
- LeetCode题库第2题 两数相加
两数相加 LeetCode题库第二题 两数相加 看完题目,就可以将题目抽象为三个指针,前两个指针是l1和l2,后一个指针是我们要求的,这三个指针同时移动,由于可能会产生进位,所以可以用一个变量来存储这 ...
- leetcode 力扣每日一题系列详解——总目录
这是总目录,该系列持续更新中........ leetcode 力扣每日一题系列详解--总目录
- 445. 两数相加 II golang
题目 两数相加 II 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零 ...
- leetcode-445. 两数相加 II
给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进阶: 如 ...
最新文章
- python卸载opencv_怎么为python安装新版的opencv模块-百度经验
- frontpage 编辑html 乱码,在 FrontPage 2003 中编辑 PHP 及乱码问题
- Conan and Agasa play a Card Game
- wxWidgets:wxAuiManagerEvent类用法
- java 父子线程 调用链_ZipKin原理学习--Zipkin多线程及线程池中追踪一致性问题解决...
- 暴风集团冯鑫被批捕:涉嫌对非国家工作人员行贿罪、职务侵占罪
- Ubuntu 18.04环境下Django的安装配置图文详解
- 从“运维”处谈OFO失败
- 关键词文章自动生成工具-关键词组合工具-关键词文章采集工具
- iOS 将PCM格式转换为WAV格式 播放wav音频或者直接播放pcm文件
- android面试基础总结
- 滴滴估值630亿美元开启新一轮融资,2021年前上市;索信达新三板退市后二次“流血”冲击香港IPO;蜻蜓FM COO肖轶离职...
- 分期付款“名义利率”和“实际利率”的公式及其套路
- 计算机的设备驱动程序在哪里查看,什么是驱动程序?如何查看电脑的驱动程序?看下面的文章就明白了...
- 附加题——求n的阶乘和
- 记录舒马赫告别F1车坛(转载)
- python怎么关闭浏览器_/python里webbrowser怎么关闭游览器
- nodejs uuid 生成
- EXCEL 数据分析基础知识
- 农场渲染文件服务器搭建,【渲染农场】如何搭建工作室小规模gpu渲染农场