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第二题:两数相加的更多相关文章

  1. LeetCode刷题--两数相加(中等)

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  2. leetcode刷题第二天<两数相加>

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  3. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  4. golang 算法题 : 两数相加

    package mainimport "fmt"type ListNode struct { Val int Next *ListNode}func main() { l1 := ...

  5. 【LeetCode每日一题 Day 2】2. 两数相加

    大家好,我是编程熊,今天是LeetCode每日一题的第二天,一起学习的是LeetCode第二题<两数相加>. 题意 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 ...

  6. leetcode 刷题(2)--- 两数相加

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  7. 【leetcode】 算法题2 两数相加

      问题      给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

  8. leetcode刷题2:两数相加add_two_numbers

    题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...

  9. LeetCoded第2题题解--两数相加

    2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  10. day2——两数相加

    // 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法题干//给定两个非空链表来表示两个非负整数.位数按照逆序方式存储, ...

随机推荐

  1. docker方式部署禅道

    一.概述 使用docker方式部署禅道简单,快速,不容易出错.比起编译安装要方便很多. 二.部署 环境说明 操作系统:centos 7.6 ip地址:10.212.82.65 docker版本:19. ...

  2. 后端程序员之路 17、LaTeX公式

    之前的文章写了两个公式:d(x,y)=\sqrt{\sum_{i=1}^{n}(x_i-y_i)^2} H_x=-\sum_{i=1}^{n}p(x_i)\log_{2}{p(x_i)} LaTex ...

  3. 常用linux命令,开发必备-速收藏

    在前面我们介绍了通过VirtualBox安装Linux的方法,参考: 一网打尽,一文讲通虚拟机VirtualBox及Linux使用 本文我们将介绍在使用linux的过程中常用的一些Linux命令,掌握 ...

  4. 剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储

    剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数. 以上 ...

  5. Flink的日志配置

    ------------恢复内容开始------------ 介绍flink在本地运行和on yarn运行时的日志配置. 很多现代框架都是用门面模式进行日志输出,例如使用Slf4j中的接口输出日志,具 ...

  6. docker 部署mysql服务之后,执行sql脚本

    1,先将.sql文件copy到docker容器里 docker ps //找到容器的短ID或者指定的name. docker inspect  -f '{{.Id}}' id or name 得到指定 ...

  7. 关于主机不能访问虚拟机的web服务解决

    centos7默认并没有开启80端口,我们只有开启就行 [root@localhost sysconfig]# firewall-cmd --permanent --add-port=3032/tcp ...

  8. C# 基础 - linq 举例应用

    public class Player { public string Id { get; set; } public string Name { get; set; } public int Age ...

  9. MySQL按天备份二进制日志

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:guozhen.zhang     import MySQLdbimport timeimp ...

  10. python实现顺序表

    python实现顺序表可以有两中形式进行存储 列表 元组 其实简单来说,顺序表无非就是操作列表和元组的方法来对顺序表进行操作. 实例代码 7 class SqList: 8 def __init__( ...