Leecode第二题:两数相加
Leecode2
先看题目 :
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
具体详情可以点进链接 题目这里就不做多余的解释了
题目分析
注意看提示
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
说明没有空链表 同时 肯定会越界
ok 我们就不能采用普通的办法了
代码
ok 我们看代码:
先看一个比较容易理解的
先取出数据,后计算结果,在组合答案并返回
int a[101];
int b[101];// 初始化 数组
int End[102];// 最后的结果数组
int i;
for(i=0;i<101;i++)
{
a[i]=b[i]=End[i]=0;// 初始化
}
// 我们先算出结果 然后将其写入结构体 然后返回
i=0;
ListNode * l=l1;
while (l) {
a[i++]=l->val;
l=l->next;// 取出l1
}
l=l2;
int aLength=i;
i=0;
while (l) {
b[i++]=l->val;
l=l->next;// 取出l2
}
int bLength=i;
int Cout=0;// 是否进位
int endLength=aLength >bLength? aLength :bLength;// 取最长的长度
for (i=0; i<endLength; i++) {
//进位位
Cout=a[i]+b[i]+Cout;
End[i]=Cout%10;;
Cout/=10;
}
if (Cout>0) {// 最高位是否发生进位 进位长度加一
End[endLength]=Cout;
endLength++;
}
ListNode *List =new ListNode;
l=List;
l->val=End[0];// 先把第一位放进去
for(i=1;i<endLength;i++)
{
l->next=new ListNode;
l=l->next;
l->val=End[i];
l->next=NULL;
}
// cout << endl;// 输出验证
l=List;
// while (l) {
// cout << l->val << "->";
// l=l->next;
// }
return List;
看一下结果:
执行用时: 52 ms
内存消耗: 69.4 MB
不过这个代码的效率可能会比较低 : 超越了20%的提交记录,不过这个更容易看懂
看一个更简便的方式 ,
int Cout =0;
ListNode * Lis = new ListNode;
ListNode * l=Lis;
while(l1 && l2){
Lis->next=new ListNode;
Lis=Lis->next;
Cout=Cout+l1->val+l2->val;
l1=l1->next;
l2=l2->next;
Lis->val=Cout%10;
Cout/=10;
}
while (l1) {
Cout+=l1->val;
l1=l1->next;
Lis->next=new ListNode;
Lis=Lis->next;
Lis->val=Cout%10;
Cout/=10;
}
while (l2) {
Cout+=l2->val;
l2=l2->next;
Lis->next=new ListNode;
Lis=Lis->next;
Lis->val=Cout%10;
Cout/=10;
}
if(Cout>0){
Lis->next =new ListNode;
Lis = Lis->next;
Lis->val=Cout;
Lis->next=NULL;
}
return l->next;
这个就不加注释了 ,和上面原理差不多。
这个的结果:
执行结果:
执行结果:
通过
执行用时:32 ms, 在所有 C++ 提交中击败了86.94%的用户内存消耗:69.6 MB, 在所有 C++ 提交中击败了14.75%的用户
时间上就会快很多 不过也跟处理机有关,就上面这个代码,我交了好多次,还出现过52ms的情况
总结
这里主要考察大数加法 原理根小时候学的加法一模一样 ,相信看过上面代码就理解个差不多了,就不多解释了。
Leecode第二题:两数相加的更多相关文章
- LeetCode刷题--两数相加(中等)
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- leetcode刷题第二天<两数相加>
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- leetCode刷题 | 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- golang 算法题 : 两数相加
package mainimport "fmt"type ListNode struct { Val int Next *ListNode}func main() { l1 := ...
- 【LeetCode每日一题 Day 2】2. 两数相加
大家好,我是编程熊,今天是LeetCode每日一题的第二天,一起学习的是LeetCode第二题<两数相加>. 题意 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 ...
- leetcode 刷题(2)--- 两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- LeetCoded第2题题解--两数相加
2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- day2——两数相加
// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法题干//给定两个非空链表来表示两个非负整数.位数按照逆序方式存储, ...
随机推荐
- Prism.WPF -- Prism框架使用(下)
本文参考Prism官方示例 命令使用 Prism提供了两种命令:DelegateCommand和CompositeCommand. DelegateCommand DelegateCommand封装了 ...
- RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示
RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示 关键词:网络性能测试:RFC2544:吞吐量:吞吐率. RFC2544协议是RFC组织提出的用于评测网络互联设备( ...
- 关闭ubuntu防火墙
1.关闭ubuntu的防火墙 ufw disable 开启防火墙 ufw enable 2.卸载了iptables apt-get remove iptables 3.关闭ubuntu中的防火墙的其余 ...
- 前端笔记:React的form表单全部置空或者某个操作框置空的做法
1.全部置空的做法,一般在弹出框关闭后,需要重置该form所有表单: this.props.form.resetFields(); 2.针对某个操作框置空的做法 例如,form表单里有一个部门和一个张 ...
- JSP、EL表达式、JSTL标签库干货(建议收藏)
JSP(Java Server Pages)类似于ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件, ...
- 在SSM框架中如何将图片上传到数据库中
今天我们来看看SSM中如何将图片转换成二进制,最后传入到自己的数据库中,好了,废话不多说,我们开始今天的学习,我这里用的编辑器是IDEA 1.导入图片上传需要的jar依赖包 1 <depende ...
- Apache JMeter 5.4.1 Build Development
1. 说明 经过漫长的等待终于将开发环境搭建成功了!网络慢真的是伤不起!grade,确实要比maven简洁.....嗯!真香! 2. 工具准备 JDK1.8+ 这... ...
- Linux系统浮动IP的配置
什么是浮动IP,为什么要配置浮动IP 首先说一下为什么要配置浮动IP. 原文链接:https://blog.csdn.net/readiay/article/details/53538085 现在有一 ...
- java例题_50 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1 /*50 [程序 50 文件 IO] 2 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 3 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放 ...
- 2021精选 Java面试题附答案(一)
1.什么是Java Java是一门面向对象的高级编程语言,不仅吸收了C++语言的各种优点,比如继承了C++语言面向对象的技术核心.还摒弃了C++里难以理解的多继承.指针等概念,,同时也增加了垃圾回收机 ...