题意

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 大整数加法 高精度加法 链表的更多相关文章

  1. leetcode 第二题Add Two Numbers java

    链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...

  2. LeetCode第二题—— Add Two Numbers(模拟两数相加)

    Description: You are given two non-empty linked lists representing two non-negative integers. The di ...

  3. Leetcode 第 2 题(Add Two Numbers)

    Leetcode 第 2 题(Add Two Numbers) 题目例如以下: Question You are given two linked lists representing two non ...

  4. 乘风破浪:LeetCode真题_002_Add Two Numbers

    乘风破浪:LeetCode真题_002_Add Two Numbers 一.前言     这次的题目是关于链表方面的题目,把两个链表对应节点相加,还要保证进位,每个节点都必须是十进制的0~9.因此主要 ...

  5. c++ 超长整数加法 高精度加法

    c++ 超长整数加法 高精度加法 实现思路 不能直接使用加法,因为int和long long都已超出最大数据表示范围 数据读入采用string类型,读入后将数据的每一位存储到vector中 vecto ...

  6. LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)

    这是悦乐书的第232次更新,第245篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448).给定一个整数数组,其中1≤a[i]≤n(n =数组的大小) ...

  7. LeetCode算法题-Add Binary(Java实现)

    这是悦乐书的第157次更新,第159篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67).给定两个二进制字符串,返回它们的总和(也是二进制字符串).输 ...

  8. 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...

  9. LeetCode算法题-Self Dividing Numbers(Java实现)

    这是悦乐书的第305次更新,第324篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是728).自分割数是一个可被其包含的每个数字整除的数字.例如,12 ...

随机推荐

  1. Android studio 断点调试整理

    一. 开始断点调试 点击debug开始调试

  2. [HTML5] input标签 disable属性

    <span>服务器名称:<input type="text" name="server_name" placeholder="服务器 ...

  3. Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着

    //为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着 package TanKe.lbl;import java.awt.*;import java.awt.ev ...

  4. 【GET TIPS】Chrome所见即所得的截图技巧

    精简的前言: 对,我就是想说下事情的来龙去脉.您要不想听,就把耳朵捂起来23333. 想截个新冠肺炎病毒,全国确诊人数今日增长的图,以确定非湖北地区不再明显增长. 但由于网页需要的内容分布在两页,需要 ...

  5. F——宋飞正传(HDU3351)

    题目:   I’m out of stories. For years I’ve been writing stories, some rather silly, just to make simpl ...

  6. RabbitMQ配置死信队列

    死信队列 消息传输过程中难免会产生一些无法及时处理的消息,这些暂时无法处理的消息有时候也是需要被保留下来的,于是这些无法被及时处理的消息就变成了死信. 既然需要保留这些死信,那么就需要一个容器来存储它 ...

  7. sublime text3 安装详解+前端插件

    1,下载sublime 3,地址:http://www.sublimetext.com/ 2,注册码:(在网上找的,感谢前辈)打开sublime3, help----add license---复制下 ...

  8. Android Studio无法下载sdk的问题

    参考自:解决Android Studio无法下载sdk的问题 国内网站无法登进google,android sdk无法下载. 尝试使用FQ,重装软件都没有成功. 最后找到了解决办法:http://pi ...

  9. #《Essential C++》读书笔记# 第一章 C++ 编程基础

    前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...

  10. 伟大的悲剧——记CSP2019

    伟大的悲剧——记CSP2019 就算伟大,依然悲剧…… 现在我好恨自己 我……差一点……就是省一了…… 这一点是多少呢? 2分! 1名! 省一65人,我第66! 唉……太悲催了…… jx的分数线居然还 ...