两数相加

LeetCode题库第二题 两数相加

看完题目,就可以将题目抽象为三个指针,前两个指针是l1和l2,后一个指针是我们要求的,这三个指针同时移动,由于可能会产生进位,所以可以用一个变量来存储这个进位。将l1、l2、进位值这三个值相加后要对10求余加到第三个指针,更新进位值,直到遍历完l1和l2中较短的那个,然后处理l1和l2中较长的那个。最后要注意,如果进位值不为0,说明还要增加一个节点。

public ListNode try1(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}ListNode rs = new ListNode();    //结果节点的前一个节点ListNode newhead = rs;           //结果节点的替身,用来向后移动接收和int enter = 0;   //存储进位while (l1 != null && l2 != null) {   //当l1和l2都没有遍历结束newhead.next = new ListNode((l1.val + l2.val + enter) % 10);   //求和,记得对10求余enter = (l1.val + l2.val + enter) / 10;     //求进位值l1 = l1.next;      //l1、l2、newhead都向后移l2 = l2.next;newhead = newhead.next;}if (l1 != null || l2 != null) {    //l1和l2的长度不相等,对多出来的长度加到newhead的后面 ListNode tem = new ListNode();if (l1 != null) {tem = l1;} else {tem = l2;}while (tem != null) {newhead.next = new ListNode((tem.val + enter) % 10);enter = (tem.val + enter) / 10;tem = tem.next;newhead = newhead.next;}}if (enter != 0) {      //注意:进位值不为0,说明还要进一位newhead.next = new ListNode(enter);}return rs.next;    //注意:rs这个节点是一个空节点,真正的开始节点是rs的下一个节点
}

通过了,看了看别人的:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode p1 = l1, p2 = l2;ListNode dummy = new ListNode(-1);ListNode p = dummy;int carry = 0, newVal = 0;while (p1 != null || p2 != null || carry > 0) {newVal = (p1 == null ? 0: p1.val) + (p2 == null ? 0: p2.val) + carry; carry = newVal / 10;newVal %= 10;p.next = new ListNode(newVal);p1 = p1 == null? null: p1.next;p2 = p2 == null? null: p2.next;p = p.next;}return dummy.next;
}

好家伙,代码比我少了一半,我看了一下,用了问号表达式简化代码,将l1和l2中较短的用0补齐后就可以将循环的条件变成只要l1或l2不为null或进位值不为0。

LeetCode题库第2题 两数相加相关推荐

  1. leetcode力扣刷题系列python——2、两数相加

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

  2. leetcode 2. Add Two Numbers | 2. 两数相加(Java)

    题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 需要注意 当两个链表不一样长时 的收尾处理. /*** Definition for ...

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

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

  4. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  5. LeetCode题库整理【Java】—— 2 两数相加

    LeetCode题库整理[Java] 2.两数相加 题目:给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果, ...

  6. leetcode题库:2.两数相加

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

  7. 题解——两种算法解Leetcode题库第977题(暨双指针法小结)

    一.Leetcode题库第977题题目 977. 有序数组的平方 二.解法一--暴力解法 算法思路:for循环遍历数组,对数组元素做平方操作:调用sorted()函数对处理后的数组进行快速排序 算法时 ...

  8. LeetCode第二题:两数相加(Add Two Numbers)

    LeetCode第二题:两数相加(python,java) You are given two non-empty linked lists representing two non-negative ...

  9. leetCode刷题 2. 两数相加

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

最新文章

  1. 快速了解FAT32文件系统
  2. Linux platform总线(1):总体框架
  3. 基于Android Studio搭建cordova开发环境
  4. table类型数据提交_OGG数据同步异常问题总结
  5. .NET 4.0 任务(Task)
  6. 16 操作系统第四章 文件管理 文件的基本操作 文件共享 文件保护 文件系统的层次结构
  7. OSI七层模型都是什么?
  8. python mongodb_python实现mongodb的增删改查
  9. 10.这就是搜索引擎:核心技术详解 --- 网页去重
  10. 超级好看的windows终端美化教程
  11. ajax背景,ajax到底是什么?ajax的背景和使用介绍(附实例解析)
  12. 四川江安戏剧“青年训练营”:播撒颗颗戏剧种子
  13. 计算机系学生的梦想,编写我们的梦想——北大计算机系学生生活掠影-北京大学网络与信息.ppt...
  14. 如何在百度地图、腾讯地图标注公司地址信息?
  15. Global项目|浅析销售BOM实施方案及注意事项
  16. 【图像去噪】基于matlab小波变换(硬阙值+软阙值)图像去噪【含Matlab源码 391期】
  17. java的基本数据类型有什么特点,java八大基本数据类型
  18. 连接mysql数据库失败问题
  19. 利用Html完成一张课程表的网页
  20. 2017年5月问题记录与总结——powerpc p1020 spi flash驱动

热门文章

  1. 拥抱智能,AI视频编码技术的新探索
  2. 09 / LiveVideoStack主编观察:有趣的灵魂是一面镜子
  3. 这条路有多长,有多难 | 专访OnVideo创始人余世兵刘歧
  4. 深入浅出理解 Spark:环境部署与工作原理
  5. 腾讯AI Lab推进医疗全流程覆盖:辅诊导诊精度再升级、布局三类病理AI研究
  6. PMP之项目整合管理之变更管理计划
  7. Linux系统中df与du命令查看分区大小
  8. linux部署Nexus OSS
  9. ubuntu下载工具aria2 uGet
  10. 定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句