LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
给你两个非空链表,每个节点存储一位值,是反过来存储的。用同样的存储方式返回他们的和。
思路
直接模拟,高精度加,考察链表。裸题。
时间复杂度 O(max(L1,L2))O(max(L1,L2))O(max(L1,L2))
源码
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode r = null;
int t = 0;
int s;
while (l1 != null && l2 != null) {
s = l1.val + l2.val + t;
l1 = l1.next;
l2 = l2.next;
t = s/10; s %= 10;
if (r == null) {
r = new ListNode(s);
head = r;
} else {
r.next = new ListNode(s);
r = r.next;
}
}
ListNode rest;
if (l1 != null)
rest = l1;
else if (l2 != null)
rest = l2;
else {
// case 3
if (t > 0)
r.next = new ListNode(t);
return head;
}
while (rest != null) {
s = rest.val + t;
rest = rest.next;
t = s/10; s %= 10;
r.next = new ListNode(s);
r = r.next;
}
if (t > 0)
r.next = new ListNode(t);
return head;
}
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode r = null;
int t = 0;
int s;
while (l1 != null || l2 != null || t > 0) {
s = (l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + t;
l1 = l1 == null ? null : l1.next;
l2 = l2 == null ? null : l2.next;
t = s/10; s %= 10;
if (r == null) {
r = new ListNode(s);
head = r;
} else {
r.next = new ListNode(s);
r = r.next;
}
}
return head;
}
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head,r;
head = r = new ListNode(0);
int t = 0;
int s;
while (l1 != null || l2 != null || t > 0) {
s = (l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + t;
l1 = (l1 == null ? null : l1.next);
l2 = (l2 == null ? null : l2.next);
t = s/10;
r = r.next = new ListNode(s%10);
}
return head.next;
}
}
时间比较及分析
结果比较
3次的结果分别是
Runtime: 31 ms, faster than 38.95% of Java online submissions for Add Two Numbers.
Memory Usage: 43.3 MB, less than 100.00% of Java online submissions for Add Two Numbers.
Runtime: 23 ms, faster than 67.88% of Java online submissions for Add Two Numbers.
Memory Usage: 48.1 MB, less than 100.00% of Java online submissions for Add Two Numbers.
Runtime: 21 ms, faster than 92.00% of Java online submissions for Add Two Numbers.
Memory Usage: 47.9 MB, less than 100.00% of Java online submissions for Add Two Numbers.
分析
第一次提交只有38.95%不到60%,由于时间复杂度已经是线性了,而且理论上复杂度不能再低了,因此推测应该是——
我人丑代码丑,自带大常数。

于是我想了一下,改成了版本2.过60%了。
我觉得就可以了。
^_^
LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表的更多相关文章
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
- LeetCode第二题—— Add Two Numbers(模拟两数相加)
Description: You are given two non-empty linked lists representing two non-negative integers. The di ...
- Leetcode 第 2 题(Add Two Numbers)
Leetcode 第 2 题(Add Two Numbers) 题目例如以下: Question You are given two linked lists representing two non ...
- 乘风破浪:LeetCode真题_002_Add Two Numbers
乘风破浪:LeetCode真题_002_Add Two Numbers 一.前言 这次的题目是关于链表方面的题目,把两个链表对应节点相加,还要保证进位,每个节点都必须是十进制的0~9.因此主要 ...
- c++ 超长整数加法 高精度加法
c++ 超长整数加法 高精度加法 实现思路 不能直接使用加法,因为int和long long都已超出最大数据表示范围 数据读入采用string类型,读入后将数据的每一位存储到vector中 vecto ...
- LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)
这是悦乐书的第232次更新,第245篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448).给定一个整数数组,其中1≤a[i]≤n(n =数组的大小) ...
- LeetCode算法题-Add Binary(Java实现)
这是悦乐书的第157次更新,第159篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67).给定两个二进制字符串,返回它们的总和(也是二进制字符串).输 ...
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- LeetCode算法题-Self Dividing Numbers(Java实现)
这是悦乐书的第305次更新,第324篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是728).自分割数是一个可被其包含的每个数字整除的数字.例如,12 ...
随机推荐
- iptbales 允许访问vsftp
1.允许20 21 端口iptables -I INPUT -p tcp -m multiport --dport 20,21 -j ACCEPT 2.允许关联包通过iptables -A INPUT ...
- CentOS7.3yum安装MariaDB报错[Errno 256]
在yum安装MariaDB时出现下面这个错误提示,然后着手排查,先检查了/etc/yum.repo.d/下的配置文件,没有错误. failure: repodata/repomd.xml from m ...
- Vue中你可能认为是bug的情况原来是这样的
前言 我们知道Vue框架剧本双向数据绑定功能,在我们使用方便的同时,还有一些细节问题我们并不知道,接下来一起探讨一些吧 双向数据绑定 js变量改变影响页面 页面改变影响js变量 Vue2是如何做到数据 ...
- 学习笔记——python(继承)
学习笔记(Python继承) 有几种叫法(父类-子类.基类-派生类)先拿代码演示一下: class father: def work(self): print("work>>&g ...
- 使用 linux kernel +busybox 定制linux系统
目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序 ...
- 将Markdown编辑器搬进您的博客-让我们更优雅的书写文章
各位小伙伴们,冷月今天给大家发一波福利.我们都知道markdown编辑器非常的好用,是我们写作的好帮手.这样的一款好用的文章编辑器,我们怎么才能让自己的博客也支持呢,冷月今天来教大家如何将Markdo ...
- youtube使用youtube-dl下载挂代理的方法
youtube-dl.exe --no-check-certificate --proxy=127.0.0.1:1080 --external-downloader=aria2c --external ...
- Page Object设计模式(二)——poium测试库
一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...
- JAVA成长之路SpringCloud脚印(一)
从即日起开始学习SpringCloud,在这里记录下学习过程,共勉,欢迎指正. 环境:IDEA2019.3.3.JAVA13 一.spring cloud简介 spring cloud 为开发人员提供 ...
- form表单中给input 添加 数量可以增减的按钮
只需给input表单增加type=number即可