LeetCode题库第2题 两数相加
两数相加
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题 两数相加相关推荐
- leetcode力扣刷题系列python——2、两数相加
题目: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示 ...
- leetcode 2. Add Two Numbers | 2. 两数相加(Java)
题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 需要注意 当两个链表不一样长时 的收尾处理. /*** Definition for ...
- 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)
LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...
- LeetCode题库第1题 两数之和
两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...
- LeetCode题库整理【Java】—— 2 两数相加
LeetCode题库整理[Java] 2.两数相加 题目:给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果, ...
- leetcode题库:2.两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 题解——两种算法解Leetcode题库第977题(暨双指针法小结)
一.Leetcode题库第977题题目 977. 有序数组的平方 二.解法一--暴力解法 算法思路:for循环遍历数组,对数组元素做平方操作:调用sorted()函数对处理后的数组进行快速排序 算法时 ...
- LeetCode第二题:两数相加(Add Two Numbers)
LeetCode第二题:两数相加(python,java) You are given two non-empty linked lists representing two non-negative ...
- leetCode刷题 2. 两数相加
原题链接: leetcode-cn.com/problems/ad- 题目描述 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你 ...
最新文章
- 快速了解FAT32文件系统
- Linux platform总线(1):总体框架
- 基于Android Studio搭建cordova开发环境
- table类型数据提交_OGG数据同步异常问题总结
- .NET 4.0 任务(Task)
- 16 操作系统第四章 文件管理 文件的基本操作 文件共享 文件保护 文件系统的层次结构
- OSI七层模型都是什么?
- python mongodb_python实现mongodb的增删改查
- 10.这就是搜索引擎:核心技术详解 --- 网页去重
- 超级好看的windows终端美化教程
- ajax背景,ajax到底是什么?ajax的背景和使用介绍(附实例解析)
- 四川江安戏剧“青年训练营”:播撒颗颗戏剧种子
- 计算机系学生的梦想,编写我们的梦想——北大计算机系学生生活掠影-北京大学网络与信息.ppt...
- 如何在百度地图、腾讯地图标注公司地址信息?
- Global项目|浅析销售BOM实施方案及注意事项
- 【图像去噪】基于matlab小波变换(硬阙值+软阙值)图像去噪【含Matlab源码 391期】
- java的基本数据类型有什么特点,java八大基本数据类型
- 连接mysql数据库失败问题
- 利用Html完成一张课程表的网页
- 2017年5月问题记录与总结——powerpc p1020 spi flash驱动