LeetCode题解 #2 Add Two Numbers
题目大意:使用链表表示的两个整数,计算出其和,以同样的形式返回。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
觉得做OJ最大的问题是有时看不懂题目。
其实是这样的,一个链表代表一个非负整数数,是从右往左看的:
(2 -> 4 -> 3) = 342;
(5 -> 6 -> 4)=465;
342+465=7 -> 0 -> 8=807;
逆序其实是很大很大的便利!!!!
因为最左边是个位,只要这样一个个加,在考虑进位就好了。而且个位数相加,进位只能是1.
如果左边是最高位就麻烦了,因为数都是从最低位开始加的,还要遍历到最右边什么的。
所以思路如下:
1、一个用来记录进位的变量
2、如果两个链表都非空,把结点得数取出来,相加,对10取余构造新结点,记录进位。list=list.next
3、如果任意一个链表空了,就直接以他的结点构造新结点。
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode temp1 = l1;
ListNode temp2 = l2;
int temp =temp1.val+temp2.val;
//System.out.println("first------->"+temp);
int jinwei = 0;
if(temp>=10){
temp%=10;
jinwei=1;
}
temp1=temp1.next;
temp2=temp2.next;
ListNode result = new ListNode(temp);
ListNode resulttemp = result;
while(temp1!=null&&temp2!=null){
//连个链表都有结点,则两节点相加
temp =temp1.val+temp2.val;
//如果前面有进位
if(jinwei==1){
temp++;
jinwei--;
}
//考虑进位
if(temp>=10){
temp%=10;
jinwei=1;
}
resulttemp.next = new ListNode(temp);
temp1=temp1.next;
temp2=temp2.next;
resulttemp=resulttemp.next;
}
while(temp1!=null){
if(jinwei==1){
int t1 = ++temp1.val;
jinwei--;
if(t1>=10){
t1%=10;
jinwei++;
}
resulttemp.next = new ListNode(t1);
}
else{
resulttemp.next = new ListNode(temp1.val);
}
resulttemp=resulttemp.next;
temp1=temp1.next;
}
while(temp2!=null){
if(jinwei==1){
int t2 = ++temp2.val;
jinwei--;
if(t2>=10){
t2%=10;
jinwei++;
}
resulttemp.next = new ListNode(t2);
}
else{
resulttemp.next = new ListNode(temp2.val);
}
resulttemp=resulttemp.next;
temp2=temp2.next;
}
if(temp1==null&&temp2==null&&jinwei==1)
resulttemp.next = new ListNode(1);
return result;
}
}
所以说,大数的构造就应该这样构造,虽然是一道加法题,但是加减乘除都能很好的支持。
一开始想的是,把数取出来,然后构造一个数,再相加,然后再构造链表就行。但这样是错误的!!!
因为传入的链表可能很长很长,用long都会溢出的超级大数!
而且,这个代码是直接在LeetCode上写的,其实也挺方便,毕竟我只用printf来调试。也就是没了代码补全而已,不过不用写main函数也好。
LeetCode题解 #2 Add Two Numbers的更多相关文章
- 《LeetBook》LeetCode题解(2):Add Two Numbers [M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- leetcode题解2. Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- LeetCode 题解之Add Two Numbers II
1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Lis ...
- LeetCode题解之Add two numbers
1.题目描述 2.题目描述 题目思路可以参考合并单链表的思路,定义一个全局 进位标志,如果两个数值相加得到需要进位,则将进位标志置为1 . 3.代码 ListNode* addTwoNumbers(L ...
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- C# 写 LeetCode Medium #2 Add Two Numbers
2. Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. ...
- LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...
随机推荐
- 【牛客练习赛12-B】迷宫(BFS)
链接:https://www.nowcoder.net/acm/contest/68/B 题目描述 这是一个关于二维迷宫的题目.我们要从迷宫的起点 'S' 走到终点 'E',每一步我们只能选择上下左右 ...
- Hibernate 悲观锁,乐观锁
业务逻辑的实现过程中,往往需要保证数据访问的排他性.因此,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无 ...
- Java IO流读写文件的几个注意点
平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不 ...
- 解决问题:zipimport.ZipImportError: can't decompress data; zlib not available
场景描述 需要从源代码编译安装python-3.6.1的版本 环境描述 python-2.7.5, Centos 7 步骤重复 解压缩python-xx.tgz 进入源代码目录 ./configure ...
- 无法打开包括文件:“iostream.h”
把#include<iostream.h>改为:#include<iostream>using namespace std; #include<iostream.h> ...
- 简单实用的跨域表单POST提交
我们这里使用了iframe嵌套form表单POST提交,很简单,却能满足get|post等任何复杂情况的要求:缺点是没有返回值. 针对需要的地方加上一个iframe嵌套并塞入隐藏form表单,然后获取 ...
- 核PCA投影平面公式推导
样本方差推导 样本方差公式\[S = \frac{1}{n-1}\sum_{i=1}^n(x_i-\mu_i)^2\] 扩展开来得到\[S = \frac{1}{n-1}[(X-\frac{1}{n} ...
- Python学习-list操作
Python列表(list)操作: 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置 ...
- [ArgumentException: 可能证书“CN=JRNet01-PC”没有能够进行密钥交换的私钥,或者进程可能没有访问私钥的权限。有关详细信息,请参见内部异常。]
堆栈跟踪: [CryptographicException: 密钥集不存在. ] System.Security.Cryptography.Utils.CreateProvHandle(CspPara ...
- restful规则
参考连接:https://blog.igevin.info/posts/restful-api-get-started-to-write/#url_rules https://juejin.im/po ...