leetcode2. 两数相加--每天刷一道leetcode系列!
来自:程序员面试
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
分析
运算规则和我们怎么做加法很像。我们做加法的时候加数和被加数的个位相加产生和的个位数,并且如果相加的结果大于10,需要向十位产生进位。同理十位、百位。
此题中我们也可以采取这种方式。
(head1.val + head2.val + jinwei) % 10 就是结果中此位置的值。而新的进位为(head1.val + head2.val + jinwei) / 10 。
有两个地方是主要注意的。
1、可能会出现head1或者head2已经为null了的情况。
2、最后head1和head2均为null以后,还要考虑jinwei如果不为0的情况,此时要加其加至链表末尾。
通过下图能很好的解释分析中介绍的内容。
代码如下
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}int jinwei = 0;ListNode res = new ListNode(-1);ListNode tmp = res;while (l1 != null && l2 != null) {int sum = l1.val + l2.val + jinwei;res.next = new ListNode(sum % 10);res = res.next;jinwei = sum / 10;l1 = l1.next;l2 = l2.next;}while (l1 != null) {int sum = l1.val + jinwei;res.next = new ListNode((sum) % 10);res = res.next;jinwei = sum / 10;l1 = l1.next;}while (l2 != null) {int sum = l2.val + jinwei;res.next = new ListNode((sum) % 10);res = res.next;jinwei = sum / 10;l2 = l2.next;}if (jinwei == 1) {res.next = new ListNode(1);}return tmp.next;}
下面这种代码看起来或许会更简洁一点。
public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}int jinwei = 0;ListNode res = new ListNode(-1);ListNode tmp = res;while (l1 != null || l2 != null) {int val1 = l1 == null ? 0 : l1.val;int val2 = l2 == null ? 0 : l2.val;int sum = val1 + val2 + jinwei;res.next = new ListNode(sum % 10);res = res.next;jinwei = sum / 10;if (l1 != null) {l1 = l1.next;}if (l2 != null) {l2 = l2.next;}}if (jinwei == 1) {res.next = new ListNode(1);}return tmp.next;}
写在最后:单个人的力量是有限的,如果你有更好的解法,欢迎留言交流。
长按订阅更多精彩▼
如有收获,点个在看,诚挚感谢
leetcode2. 两数相加--每天刷一道leetcode系列!相关推荐
- leetcode1. 两数之和--每天刷一道leetcode系列!
来自:程序员面试 作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们 ...
- LeetCode2.两数相加
LeetCode2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会 ...
- [Swift]LeetCode2. 两数相加 | Add Two Numbers
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- 简单算法题:leetcode-2 两数相加
算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...
- Leetcode-2 两数相加【c语言】
题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了 ...
- leetcode-2 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- leetcode2 两数相加
题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...
- Leetcode--2. 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- LeetCode2. 两数相加
题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...
最新文章
- PHP构建数据结构填充数据
- Java并发编程之CountDownLatch源码解析
- 【差分隐私发论文朝哪个方向走?】差分隐私的过去,现在和将来
- 一个到顶部自动加载更多的ListView
- 毕业生简单的用Python实现一个信息管理系统【含示例代码】
- 数据库比对升级脚本生成工具分享
- 有什么计算机应用基础的app,计算机应用基础软件
- x10I pC套件 官方网站下载
- 如何裁剪动图的边框?教你一键在线裁剪动图
- VUE全局this指向
- 安装mysql 遇到问题
- 录音文件下载_录音内容如何导出?对于小白来说是难题,一招教你搞定它
- 什么是电动汽车充电桩功能介绍
- ปอเช็ตติโน่ เสียดายโอกาสของทีมในเกมฟัดหงส์
- a360desktop有用吗_A360 Desktop 停用 - 2018 年 6 月 19 日
- 最小生成树Prim算法Java版
- ubuntu:VIM使用
- C++ 标准容器库小结
- 聚焦“云XR如何赋能元宇宙”,3DCAT实时云渲染首届行业生态合作交流会成功举办
- Ubuntu18.04安装wps office
热门文章
- 2020牛客多校第3场:Two Matchings[找规律+dp]
- java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
- 学习python一开始枯燥_编程零基础应当怎样开始学python?他说,看这三个经典方法...
- Linux进程突然挂死,当主进程突然死亡时,我该如何杀死linux spawnProcess?
- 利用php和ajax实现的,利用PHP和AJAX实现数据库增值
- linux 磁盘分区情况6,Linux磁盘分区介绍
- oracle+块头csc,数据块转储及RDBA的转换
- 进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈...
- 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
- 《Python从小白到大牛》第4章 Python语法基础