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. Commit规范

    Commit规范 遵循commit规范是一件很重要的事,不仅更规范,而且也方便其他人查看git记录,所以这篇博客就用来浅记一下commit需要遵循的基本规范. commit格式 在 Angular 规 ...

  2. [LC814]二叉树剪枝

    题目 题目地址 分析 这道题符合递归的性质,对于当前的节点node,当且仅当其左右孩子都为不包含1的子树,且node.val=1时,node所在的子树才符合"不包含1的子树"这一定 ...

  3. React源码解析(1): JSX语法与react项目渲染过程

    好家伙   0.前言 由于工作的需要,我不得不入手了react的全家桶,曾经我的主要技术栈是vue. 从vue转到react,一开始我感到非常不适应,jsx的语法的不了解,react hooks的使用 ...

  4. 第二章 dubbo源码解析目录

    6.1 如何在spring中自定义xml标签 dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个 ...

  5. 告别虚拟机!WSL2安装配置教程!!!

    作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 由于Linux的系统的稳定以及在环境管理方面的优越性,同时Linux对于ROS系统的独占,很多时候我们都乐意在L ...

  6. axios请求拦截器和响应拦截器

    axios里面可以设置拦截器 ,在请求发送之前做一些事情: 拦截器分[请求拦截器]和[响应拦截器] 参考地址:https://www.jb51.net/article/150014.htm 参考的地址 ...

  7. Whois 收集

    Whois 收集 Whois是什么 Whois(读作"Who is")是一个标准的互联网协议,主要用于查询域名的注册信息,包括域名所有人.注册商.注册时间.过期时间等详细信息.简单 ...

  8. autMan奥特曼机器人-定时推送的用法

    一.定时推送功能简介 "定时推送"位于"系统管理"目录 主要有两个功能: 一是定时向某人或某群发送信息. 二是定时运行某指令,就是机器人给自己发指令,让自己运行 ...

  9. TensorFlow 的基本概念和使用场景

    TensorFlow是一个开源的机器学习框架,由Google开发并维护.它提供了一个灵活的编程环境,用于构建和训练各种机器学习模型.TensorFlow是基于图计算的模型,其中节点表示数学操作,而边表 ...

  10. PowerShell开发游戏 · 打蜜蜂

         可以看到,虽然非常抽象简单,但是基础游戏框架已经搭建,游戏机制完善,就缺美工了,哈哈~~~~ [首先] Powershell不是用来开发游戏的,但是没人规定不能开发.因为它可以调取windo ...