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题 今日算法题干//给定两个非空链表来表示两个非负整数.位数按照逆序方式存储, ...
随机推荐
- Python数据读取函数
1.读取mat数据 import scipy.io as sio data_mat = sio.loadmat(data.mat) 官方文档 获取的数据为字典型,其中"data"为 ...
- C语言柔性数组和动态数组
[前言]经常看到C语言里的两个数组,总结一下. 一.柔性数组 参考:https://www.cnblogs.com/veis/p/7073076.html #include<stdio.h> ...
- web前端学习笔记(二)---Django
[前言]前面(一)学习了web的基础知识,介绍到了MVC,项目使用一个Django框架. Django book:https://code.ziqiangxuetang.com/django/djan ...
- bouncycastle中添加HMAC-SM3支持
一. 最近看完了PKCS#5中的内容,总结一下自己添加HMAC-SM3中遇到的问题和解决方法. 大概通读BC java源码以后,开始上手修改. 在SM3.java中添加如下代码: /** * SM3 ...
- golang——net/rpc包学习
1.rpc包 rpc包提供了通过网络或其他I/O连接对一个对象的导出方法的访问. 只有满足如下标准的方法才能用于远程访问,其余方法会被忽略: (1)方法是导出的(2)方法有两个参数,都是导出类型或内建 ...
- 02-Spring配置文件加载
获取IOC容器 加载.解析xml文件,形成GenericBeanDefinition,供后续实例化剩下的所有 Bean 使用. obtainFreshBeanFactory() 获取IOC容器 pro ...
- python学习之web中的html基础
HTML简介及相关标签介绍 首先,我们要了解什么是HTML? HTML被称作超文本标记语言,是一门标记语言,即该语言由各类标记标签组成. 为什么学python要学HTML? 不管学习哪个语言,我们最 ...
- python学习之类的装饰器进阶版
装饰器可以修饰函数,同样,也可以修饰类 装饰器 def deco(func): print('======>被修饰的')return func 装饰器装饰函数的方式,语法糖 @decode ...
- MySQL入门(7)——表数据的增、删、改
MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...
- Java系列教程-SpringMVC教程
SpringMVC教程 1.SpringMVC概述 1.回顾MVC 1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务 ...