Leecode2

先看题目 :

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/add-two-numbers

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

具体详情可以点进链接 题目这里就不做多余的解释了

题目分析

注意看提示

提示:

每个链表中的节点数在范围 [1, 100] 内

0 <= Node.val <= 9

题目数据保证列表表示的数字不含前导零

说明没有空链表 同时 肯定会越界

ok 我们就不能采用普通的办法了

代码

ok 我们看代码:

先看一个比较容易理解的

先取出数据,后计算结果,在组合答案并返回

  1. int a[101];
  2. int b[101];// 初始化 数组
  3. int End[102];// 最后的结果数组
  4. int i;
  5. for(i=0;i<101;i++)
  6. {
  7. a[i]=b[i]=End[i]=0;// 初始化
  8. }
  9. // 我们先算出结果 然后将其写入结构体 然后返回
  10. i=0;
  11. ListNode * l=l1;
  12. while (l) {
  13. a[i++]=l->val;
  14. l=l->next;// 取出l1
  15. }
  16. l=l2;
  17. int aLength=i;
  18. i=0;
  19. while (l) {
  20. b[i++]=l->val;
  21. l=l->next;// 取出l2
  22. }
  23. int bLength=i;
  24. int Cout=0;// 是否进位
  25. int endLength=aLength >bLength? aLength :bLength;// 取最长的长度
  26. for (i=0; i<endLength; i++) {
  27. //进位位
  28. Cout=a[i]+b[i]+Cout;
  29. End[i]=Cout%10;;
  30. Cout/=10;
  31. }
  32. if (Cout>0) {// 最高位是否发生进位 进位长度加一
  33. End[endLength]=Cout;
  34. endLength++;
  35. }
  36. ListNode *List =new ListNode;
  37. l=List;
  38. l->val=End[0];// 先把第一位放进去
  39. for(i=1;i<endLength;i++)
  40. {
  41. l->next=new ListNode;
  42. l=l->next;
  43. l->val=End[i];
  44. l->next=NULL;
  45. }
  46. // cout << endl;// 输出验证
  47. l=List;
  48. // while (l) {
  49. // cout << l->val << "->";
  50. // l=l->next;
  51. // }
  52. return List;

看一下结果:

执行用时: 52 ms

内存消耗: 69.4 MB

不过这个代码的效率可能会比较低 : 超越了20%的提交记录,不过这个更容易看懂

看一个更简便的方式 ,

  1. int Cout =0;
  2. ListNode * Lis = new ListNode;
  3. ListNode * l=Lis;
  4. while(l1 && l2){
  5. Lis->next=new ListNode;
  6. Lis=Lis->next;
  7. Cout=Cout+l1->val+l2->val;
  8. l1=l1->next;
  9. l2=l2->next;
  10. Lis->val=Cout%10;
  11. Cout/=10;
  12. }
  13. while (l1) {
  14. Cout+=l1->val;
  15. l1=l1->next;
  16. Lis->next=new ListNode;
  17. Lis=Lis->next;
  18. Lis->val=Cout%10;
  19. Cout/=10;
  20. }
  21. while (l2) {
  22. Cout+=l2->val;
  23. l2=l2->next;
  24. Lis->next=new ListNode;
  25. Lis=Lis->next;
  26. Lis->val=Cout%10;
  27. Cout/=10;
  28. }
  29. if(Cout>0){
  30. Lis->next =new ListNode;
  31. Lis = Lis->next;
  32. Lis->val=Cout;
  33. Lis->next=NULL;
  34. }
  35. 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. Vue框架- 指令操作

    目录 一.Vue指令操作 1. 表单指令 2. 条件指令 3. 循环指令 4. 斗篷指令 5. 实例成员:delimiter分隔符(了解) 6. filter过滤器 7. computed计算属性 8 ...

  2. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  3. CSS:CSS基础

    和 HTML 类似,CSS 也不是真正的编程语言,甚至不是标记语言.它是一门样式表语言,这也就是说人们可以用它来选择性地为 HTML 元素添加样式. CSS规则集 选择器(Selector):元素的名 ...

  4. 关于Laravel框架中Guard的底层实现

    1. 什么是Guard 在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用.而登录/注册认证的核心就是: 用户的注册信息存入数据库(登记) 从数据库中读取数据和用户 ...

  5. 剑指 Offer 60. n个骰子的点数 + 动态规划 + 空间优化

    剑指 Offer 60. n个骰子的点数 Offer_60 题目详情 题解分析 package com.walegarrett.offer; /** * @Author WaleGarrett * @ ...

  6. a标签不能继承父级的颜色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...

  8. Docker 三剑客 到 k8s 介绍

    一.Docker 三剑客 Docker-Compose Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启 ...

  9. ASP.NET Core扩展库之日志

        上一篇我们对Xfrogcn.AspNetCore.Extensions扩展库功能进行了简单的介绍,从这一篇文章开始,我将逐步介绍扩展库中的核心功能.     日志作为非业务的通用领域基础功能, ...

  10. Hive数据导出的几种方式

    在hive的日常使用中,经常需要将hive表中的数据导出来,虽然hive提供了多种导出方式,但是面对不同的数据量.不同的需求,如果随意就使用某种导出方式,可能会导致导出时间过长,导出的结果不满足需求, ...