LeetCode题解【题2】:两数相加
原题链接:https://leetcode-cn.com/problems/add-two-numbers/
查看请另起链接打开。
解题思路
执行用时 :2 ms, 在所有 Java 提交中击败了99.97%的用户。内存消耗 :40.6 MB, 在所有 Java 提交中击败了91.21%的用户。
此题的关键是自己实现一个两数的加法。
之前以为可以通过数学运算实现,发现无论是int还是long都会存在溢出,无法完成所有测试案例。
1、加法思路很简单,像解小学数学加法一样,个位和个位相加,十位和十位相加,类推。使用一个进位符c,若每位的两个数相加的和大于9,则,c=1;在当次相加完后,c归0;
2、取数的时候要保证两个ListNode的位都对应上,则取数都在同一个循环中去取,如果当前节点非空则取出值且当前节点指向下一个节点,若当前节点为空则取值为0。循环的跳出点是当两个当前节点的取值都为空时。
3、存数的时候也需要指定两个节点,一个是需要返回的节点ListNode r,它指向第一个节点;还有一个是存储当前计算的值的节点。初始化条件当r为null,则将第一个数存入r,再令current = r,以后每次存值的时候都是current移向下一个节点。
最后如果输入的两个ListNode都遍历完了,但是进位符c还为1,说明需要再进一位,则在返回的r后再添加1(相当于最高位是1,也只会是1)。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int n1,n2,n3;
// 初始化进位符为0
int c = 0;
ListNode r = null;
ListNode current = null;
while(l1!= null || l2!= null){
// 取数操作
if (l1 == null){
n1 = 0;
}else {
n1 = l1.val;
l1 = l1.next;
}
if (l2 == null){
n2 = 0;
}else {
n2 = l2.val;
l2 = l2.next;
}
// 当前位两个数相加的和,带上进位符c
n3 = n1+n2+c;
// 相加完成,进位符归0
c = 0;
// 若每位的两个数相加的和大于9,则,c=1
if (n3 > 9){
n3 %= 10;
c = 1;
}
// 存数操作
if (r == null) {
r = new ListNode(n3);
current = r;
} else {
current.next = new ListNode(n3);
current = current.next;
}
}
// 最后如果输入的两个ListNode都遍历完了,但是进位符c还为1,说明需要再进一位,则在返回的r后再添加1
if (c == 1){
current.next = new ListNode(1);
}
return r;
}
}
作者:xu-man-man (本人)
链接:https://leetcode-cn.com/problems/add-two-numbers/solution/liang-shu-xiang-jia-liang-ge-lian-biao-shi-xian-ji/
来源:力扣(LeetCode)
LeetCode题解【题2】:两数相加的更多相关文章
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- LeetCode题解002:两数相加
两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- Leetcode(二)两数相加
两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- LeetCode 0、《两数相加》
一.给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- LeetCode随缘刷题之两数相加
逐步解释,有说错的地方欢迎指正. package leetcode.day_12_03; /** * 给你两个非空 的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存 ...
- Leecode第二题:两数相加
Leecode2 先看题目 : 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的 ...
随机推荐
- 解Bug之路-记一次存储故障的排查过程
解Bug之路-记一次存储故障的排查过程 高可用真是一丝细节都不得马虎.平时跑的好好的系统,在相应硬件出现故障时就会引发出潜在的Bug.偏偏这些故障在应用层的表现稀奇古怪,很难让人联想到是硬件出了问题, ...
- Linux 文件特殊权限-SetGID
SUID只针对二进制可执行文件,而SGID可以针对二进制文件,这时它和SUID非常类似,命令执行在执行程序的时候,组身份变换为该文件的属组,最常见的locate命令,普通用户也可以搜索文件目录,它也可 ...
- electron内使用vue-slider-component组件报“$attrs is readonly”错误
解决办法 安装vue-no-ssr插件 https://www.npmjs.com/package/vue-no-ssr npm install vue-no-ssr --save-dev 代码 &l ...
- 优雅的敲JS代码的几个原则
一.条件语句 1,使用 Array.includes 来处理多重 || 条件 // ----- 一般 ------ if (fruit == 'apple' || fr ...
- Python基础语法之“print()”函数
print()函数是Python入门的第一个必学知识点,它经常被用来调试已写的代码,检验效果,今天小老鼠就带你盘点一下print()函数在Python中如何使用. print()函数的工作流程是这样的 ...
- thinkphp5升级thinkphp6完整步骤
在php.ini文件中 打开 php_openssl扩展,去掉前面的;extension=php_openssl.dll 在phpstudy的WWW目录打开cmd,输入composer creat ...
- 温故知新-多线程-深入刨析synchronized
Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 文章目录 摘要 synchroniz ...
- 【大厂面试05期】说一说你对MySQL中锁的了解?
这是我总结的一个表格,是本文中涉及到的锁(因为篇幅有限就没有包括自增锁) 加锁范围 名称 用法 数据库级 全局读锁 执行Flush tables with read lock命令各整个库接加一个读锁, ...
- 快捷符号输入小tip(option,alt键的妙用)
我们知道特殊符号的输入可以通过上档键(shift)加数字来完成.如!@#$%... -> (shift + 1 2 3 4 5...) 但是少有人知道windows中的alt键,或是macos中 ...
- Springboot项目整合Swagger2报错
SpringBoot2.2.6整合swagger2.2.2版本的问题,启动SpringBoot报如下错: Error starting ApplicationContext. To display t ...