[每日算法] leetcode第2题:两数相加
题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
注意
思维不要受到JVM中整数相加的限制,比如888+888不但可以看成两个Java整型数值相加,还可以看成草稿纸上的两个数进位相加。

思考: 思维发散下,还可以看成何种形式的相加呢?
如果思维受到整数相加的限制通常会想到转为两个Java整数相加,比如以下错误的方式转为整数,该方式不可取,因为链表过长时,会造成整数长度溢出。
// 将链表数据转为整数后相加获取和
for(int i=0;i<list1.size();i++){
// 当链表过长时会造成整数溢出!!!
num1+=(int)((Integer)list1.get(i) * Math.pow(10,i));
}
解法:初等数学进位方式
循环体
这里是倒序的,就像当于在草稿纸进位加法方式将位的计算顺序左右翻转进行计算。
设置一个变量跟踪进位,模拟逐位相加的过程。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
import java.util.*;
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//定义哑节点和指针节点
ListNode point = new ListNode(0);
ListNode head = point;
//记录进位
int carry = 0;
while(l1!=null || l2!=null) {
ListNode point_new = new ListNode(0);
//l1便利完了就只计算l2
if(l1==null){
int sum = l2.val + carry;
point_new.val = sum % 10;
carry = sum/10%10;
l2 = l2.next;
}else if(l2 == null ){
//l2便利完了就只计算l1
int sum = l1.val + carry;
point_new.val = sum % 10;
carry = sum/10%10;
l1 = l1.next;
}else{
int sum = l1.val + l2.val + carry;
//结果是sum个位
point_new.val = sum % 10;
//记录进位 = sum的十位
carry = sum/10%10; //两数相加时进位最大1等同:if(sum>=10){carry = 1;}else{carry = 0;}
l1 = l1.next;
l2 = l2.next;
}
point.next = point_new;
point = point.next;
}
//如果最后进位仍为1,那么链表后面追加进位
if(carry ==1 ){
point.next = new ListNode(1);
}
return head.next;
}
}
时间复杂度: O(MAX(m,n)) ,m、n表示两个链表长度。
空间复杂度: O(MAX(m,n)) ,新链表长度最多为MAX(m,n)+1。
小结
- 编程就是将现实中的事物变化过程用代码实现出来。
- 刷算法题时最重要的是懂得解题思路,不要在寻找自己熟悉语言的解题过程中浪费太多时间,有了好的思路,就可以利用自己熟悉的语言实现,语言只是工具。
[每日算法] leetcode第2题:两数相加的更多相关文章
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- LeetCode刷题--两数相加(中等)
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- Leetcode(二)两数相加
两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- LeetCode题解002:两数相加
两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- LeetCode 0、《两数相加》
一.给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- leetCode刷题 | 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- golang 算法题 : 两数相加
package mainimport "fmt"type ListNode struct { Val int Next *ListNode}func main() { l1 := ...
- 【LeetCode每日一题 Day 2】2. 两数相加
大家好,我是编程熊,今天是LeetCode每日一题的第二天,一起学习的是LeetCode第二题<两数相加>. 题意 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 ...
随机推荐
- 最新AI智能体开发案例:辅助写作神器!教你用Coze平台搭建「文匠智创 1.0」智能体!
各位小伙伴们,大家好呀!我是疯狂老包.我精心打造的<疯狂AI智能体开发:100个实战案例, 从 入门到精通 >正在开发中!要是你对 AI 应用搭建满怀热忱,渴望深入学习其中的奥秘与技巧,那 ...
- asp.net core中,使用CancellationToken在用户终止请求时取消所有异步操作+ abp中的设计
如果一个Controller.Action里的处理非常耗时,比如读数据库.文件操作.调用第三方接口等此时用户随时可能关闭浏览器.F5刷新网页等操作.但是服务端的耗时代码任然在执行,这太浪费了,既然用户 ...
- 前端实现 HTML 网页转 PDF 并导出🤓
有个新需求,当点击[下载]按钮时,直接将当前 html页面下载为 PDF.通过 html2canvas + jsPDF 可实现PDF单页下载,甚至是多页下载,记录分享一下~ 最后有源码,可自取 htm ...
- IOC 操作Bean管理(xml 注入集合属性)+(bean 作用域)
1.注入数组类型属性2.注入 List 集合类型属性3.注入 Map 集合类型属性(1)创建类,定义数组.list.map.set 类型属性,生成对应 set 方法 public class Stu ...
- 解决Git拉取出现“bad config line 1 in file C:\Users\quber/.gitconfig”的错误
1.问题描述 我们在拉取Git项目的时候,突然出现如下图所示的错误提示: 2.解决办法 定位到.gitconfig文件,然后将其删除掉: 然后在项目文件夹中点击鼠标右键,选择Git Bash Here ...
- Linux 部署Pikachu靶场
Linux 部署Pikachu靶场 环境部署 安装httpd及其相关的组件 yum install -y httpd httpd-devel 安装php及其相关组件 yum -y install ph ...
- shell 数组函数进阶练习
一维数组的定义.统计.引用和删除等操作. A=( test1 test2 test3 ) ,定义数组一般以括号的方式来定义, 数组的值可以随机定义. echo ${A[0]} ,代表引用第一个数组变量 ...
- python 输入与输出函数,格式化输出,注释,变量,整数,浮点数,字符串,布尔等说明
python 输入函数:input 语法:input("提示文字") 注意:用input输入的内容都是字符串: 输出函数:print 语法:print() -------- ...
- AD22 solder层开窗不见了什么原因?PCB阻焊层不显示阻焊。
做回来的板子焊盘没有开窗! 3D上看也是没有的! 上网查了,在设计->规则->Mask->SolderMaskExpansion 将盖油勾选去掉即可. END
- 高数小技巧:和 e^x 有关的积分该怎么算?
高数解题也需要日积月累,下面是和 \(e^{x}\) 相关的一些常用解题思路,记得收藏+关注哦,还有更多考研数学实战笔记等着你呢( ̄︶ ̄) 当前高数笔记的最新内容,可以查看: https://zhao ...
