leetcode 2. 两数相加

题目描述

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

题解

备注:没有进行输入检查,默认是有效输入数据.

按位依次累加

首先观察数字和链表的对应方式:342--(2->4->3),在链表中,最低位是头节点,那么明显的,我们可以将两个链表按照顺序累加,同时需要注意会产生进位.

考虑到进位:

  1. 获取链表上相同位数的元素并相加得到x
  2. 如果之前上一个有进位标志,则x++,设置进位标志为false
  3. 判断x>=10,如果大于等于10,则需要x-=10,并且将进位标志重新设置成true.
  4. 创建节点等
  5. 在所有的值都处理完成后,如果进位标志是true,说明需要单独进位,如99+1 = 100.

链表相加:

  1. 两个链表从头开始,设置p1p2来依次遍历
  2. p1p2都不为nullptr时,可以同时遍历两个链表:p1 != nullptr && p2 != nullptr
  3. 如果p1p2有一个走到了链表终点,即指向了nullptr,那么我们只需要遍历另外一个链表的剩余元素(需要考虑进位信息)
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {bool isOut = false;  // 进位标志ListNode *p1 = l1;ListNode *p2 = l2;ListNode *head = new ListNode(0);  // 临时的头节点,用来悬挂后续节点ListNode *cur = head;              // 当前节点while (p1 != nullptr && p2 != nullptr) {int x = p1->val + p2->val;  // 计算和if (isOut)  // 如果上一个有进位,则x++,取消进位标志{x++;isOut = false;}if (x >= 10)  // 判断当前值是否溢出{x -= 10;  // 溢出则-10,并且设置进位标志isOut = true;}ListNode *tmp = new ListNode(x);  // 构建节点cur->next = tmp;                  // 悬挂在当前节点后面cur = tmp;                        // 重设当前节点p1 = p1->next;p2 = p2->next;}// 获取到没有遍历完的listListNode *s = nullptr;if (p1 != nullptr) s = p1;if (p2 != nullptr) s = p2;while (s != nullptr) {int x = s->val;  // 获取值if (isOut)       // 还需要结合进位标志判断{x++;isOut = false;}if (x >= 10) {x -= 10;isOut = true;}ListNode *tmp = new ListNode(x);cur->next = tmp;cur = tmp;s = s->next;}if (isOut)  // 最后判断进位标志,如果还有,说明得单独创建一个节点{ListNode *tmp = new ListNode(1);cur->next = tmp;}ListNode *r = head->next;delete head;return r;}
};

执行用时:32 ms, 在所有 C++ 提交中击败了81.51%的用户

内存消耗:9.1 MB, 在所有 C++ 提交中击败了75.31%的用户

常见错误

  1. 将链表转换为数字,然后数字相加,最后将数字转为链表.在第一步转换数字的时候,链表可以存储超大数,但是数字类型long long等不一定能够存放下.
  2. 忘记考虑最后的一个进位标志.

steam 相同元素相加_LeetCode 2. 两数相加相关推荐

  1. python两数相加取_Leetcode_两数相加_Python

    小编从今天起要开始分享一些Leedcode代码,通过好好练习编程能力,争取以后找一份好工作. 题目:两数相加 # Definition for singly-linked list. # class ...

  2. python两个数相加时_两数相加 leetcode Python

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

  3. mysql 两个数相加_LeetCode 01两数之和02两数相加

    LeetCode01两数之和 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  4. 用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)

    两种解法,第一种是在原有的两个链表中选择更长的那个作为结果返回,虽然节约了空间,但是增加了时间复杂度,而且没有用到如何设置链表的增加与删除,第二种看起来清爽很多,逻辑也清晰. ### 题目 给出两个非 ...

  5. python两数相加取_两数相加(Python3)

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

  6. 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)

    LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...

  7. -9 逆序输出一个整数的各位数字_leetcode两数相加(大整数相加)

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

  8. leetCode刷题 2. 两数相加

    原题链接: leetcode-cn.com/problems/ad- 题目描述 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你 ...

  9. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  10. 两数之和,两数相加(leetcode)

    我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...

最新文章

  1. 线性代数不深入,机器学习两行泪!
  2. cups支持的打印机列表_网络存储让你的打印机瞬间变无线,打印文件不用愁
  3. Android 违规使用 Java,谷歌或面临 88 亿美元赔款
  4. JQuery EasyUI DataGrid
  5. php 字符串hash比较,分析两个 url 查询字符串和 hash 的区别
  6. RHEL7及CentOS7的语言、字符编码、键盘映射、X11布局设置(localectl)-系统管理(1)...
  7. 水很深的深度学习-Task02机器学习基础
  8. if condition 大于_西门子进一步扩展Sinumerik Edge 平台的应用程序AnalyzeMyMachine/Condition...
  9. 粗略写了使用GD2制作文字图像demo
  10. 拓端tecdat|SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
  11. (转)好的投资应当是:善良为先,智慧为道,奋斗为本
  12. 【Java架构师入门到精通】java分布式架构有哪些技术
  13. 算法帝国:华尔街交易怪兽的核武器缔造史
  14. 市场营销渠道含义是什么?
  15. 图书馆管理系统(一)
  16. 【共识专栏】共识的分类(上)
  17. Windows IDEA 字体美化
  18. Kibana:在 Kibana 中使用 Maps 和 Timelion 分析地震数据
  19. 股票历史数据-股票历史数据查询怎么查?怎么查股票历史数据?
  20. 0-1背包问题小总结(hdu 2062)

热门文章

  1. react中如何理解usestate、useEffect副作用、useRef标识和useContext
  2. vue中使用箭头控制input的焦点 适合操作大量表格填写
  3. 秦楚争霸和六国灭秦----论IE的兴衰成败
  4. 买房赠面积成楼市“潜规则”
  5. 2019面试,笔试记录
  6. arcgis建筑密度容积率覆盖率
  7. springboot+vue应急预案突发事件管理系统
  8. (很好的一篇综述) 剖析桌面化 Android 操作系统的发展与未来
  9. iOS 内购请求商品信息为空
  10. Linux驱动开发 --- CCF时钟框架