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题:两数相加的更多相关文章

  1. 【LeetCode题解】2_两数相加

    目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...

  2. Leetcode(2)两数相加

    Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

  3. LeetCode刷题--两数相加(中等)

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  4. Leetcode(二)两数相加

    两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...

  5. LeetCode题解002:两数相加

    两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  6. LeetCode 0、《两数相加》

    一.给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...

  7. Leetcode(2)-两数相加(包含链表操作的注意事项)

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  8. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  9. golang 算法题 : 两数相加

    package mainimport "fmt"type ListNode struct { Val int Next *ListNode}func main() { l1 := ...

  10. 【LeetCode每日一题 Day 2】2. 两数相加

    大家好,我是编程熊,今天是LeetCode每日一题的第二天,一起学习的是LeetCode第二题<两数相加>. 题意 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 ...

随机推荐

  1. 最新AI智能体开发案例:辅助写作神器!教你用Coze平台搭建「文匠智创 1.0」智能体!

    各位小伙伴们,大家好呀!我是疯狂老包.我精心打造的<疯狂AI智能体开发:100个实战案例, 从 入门到精通 >正在开发中!要是你对 AI 应用搭建满怀热忱,渴望深入学习其中的奥秘与技巧,那 ...

  2. asp.net core中,使用CancellationToken在用户终止请求时取消所有异步操作+ abp中的设计

    如果一个Controller.Action里的处理非常耗时,比如读数据库.文件操作.调用第三方接口等此时用户随时可能关闭浏览器.F5刷新网页等操作.但是服务端的耗时代码任然在执行,这太浪费了,既然用户 ...

  3. 前端实现 HTML 网页转 PDF 并导出🤓

    有个新需求,当点击[下载]按钮时,直接将当前 html页面下载为 PDF.通过 html2canvas + jsPDF 可实现PDF单页下载,甚至是多页下载,记录分享一下~ 最后有源码,可自取 htm ...

  4. IOC 操作Bean管理(xml 注入集合属性)+(bean 作用域)

    1.注入数组类型属性2.注入 List 集合类型属性3.注入 Map 集合类型属性(1)创建类,定义数组.list.map.set 类型属性,生成对应 set 方法 public class Stu ...

  5. 解决Git拉取出现“bad config line 1 in file C:\Users\quber/.gitconfig”的错误

    1.问题描述 我们在拉取Git项目的时候,突然出现如下图所示的错误提示: 2.解决办法 定位到.gitconfig文件,然后将其删除掉: 然后在项目文件夹中点击鼠标右键,选择Git Bash Here ...

  6. Linux 部署Pikachu靶场

    Linux 部署Pikachu靶场 环境部署 安装httpd及其相关的组件 yum install -y httpd httpd-devel 安装php及其相关组件 yum -y install ph ...

  7. shell 数组函数进阶练习

    一维数组的定义.统计.引用和删除等操作. A=( test1 test2 test3 ) ,定义数组一般以括号的方式来定义, 数组的值可以随机定义. echo ${A[0]} ,代表引用第一个数组变量 ...

  8. python 输入与输出函数,格式化输出,注释,变量,整数,浮点数,字符串,布尔等说明

    python 输入函数:input   语法:input("提示文字") 注意:用input输入的内容都是字符串: 输出函数:print   语法:print() -------- ...

  9. AD22 solder层开窗不见了什么原因?PCB阻焊层不显示阻焊。

    做回来的板子焊盘没有开窗! 3D上看也是没有的! 上网查了,在设计->规则->Mask->SolderMaskExpansion 将盖油勾选去掉即可. END

  10. 高数小技巧:和 e^x 有关的积分该怎么算?

    高数解题也需要日积月累,下面是和 \(e^{x}\) 相关的一些常用解题思路,记得收藏+关注哦,还有更多考研数学实战笔记等着你呢( ̄︶ ̄) 当前高数笔记的最新内容,可以查看: https://zhao ...