Leetcode---2.两数之和

news2024/12/24 10:28:09

目录

  • 题目
  • 分析
  • 链表
  • 最终代码实现(内含注释)

题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

分析

简单看了一下这道题直接开始解题,我的思路其实也简单,遍历两个列表,使相同位数对应的两个数相加如果大于10就进一,如果小于10直接保留,只用把长度小的数组遍历完即可,但要考虑最后一个数是否大于10,

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        l1_length=len(l1)
        l2_length=len(l2)
        l3=[]
        num = min(l1_length, l2_length)
        flag=0
        for i in range(0,num):
            s=l1[i]+l2[i]+flag
            if s-10>=0:
                flag=1
                s=s-10
                l3.append(s)
                continue
            flag=0
            l3.append(s)
        if num==l1_length and num==l2_length:
            return l3
        if num==l1_length:
            for i in l2[num:l2_length]:
                if flag!=0:
                    l3.append(i+flag)
                    flag=0
                l3.append(i)
        # print(l2[num-1:])
        if num==l2_length:
            for i in l1[num:]:
                if flag != 0:
                    l3.append(i + flag)
                    flag = 0
                l3.append(i)

        return l3

设置的flag就是一个标志看两个数相加是否大于10,又信誓旦旦的去提交,结果直接报错在这里插入图片描述
结果再次一看发现审题错误,题目中说的是链表,因此我们首先要认识链表,

链表

链表即是线性表的一种,线性表的链式表示,

  • 链式存储结构特点:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以连续,也可以不连续)。
  • 单链表可由头指针唯一确定,头指针指向链表中第一个结点。
  • 首元结点是存储第一个元素的结点。
  • 若要访问数据元素ai,须从头指针出发,顺着指针域逐个结点访问,直至第i个结点。
  • 因此,线性表的链式存储结构只适合顺序访问,不支持直接访问。
    图示结构
    在这里插入图片描述
    线性链表也即单链表,含有一个指针域。
    两种形式:
    在这里插入图片描述用Java来实现对单链表的结点类定义:
class Node<T>{
T data;  #数据域
Node<T> next;#指针域
public Node(T data){
	 this(data, null);
 }
 public Node(){		 
	this(null, null);
 }
public Node(T data, Node<T> next)
{
	this.data = data; 
	this.next = next;
}
public String toString()
{	return this.data.toString();
}
}

再实现单链表的类的实现:class LinkList<T>{ #单链表类 Node<T> head; #成员变量,头指针 int length; #表长,可无该成员,后面的算法都针对无length的链表 //单链表的初始化 public LinkList() #不带头结点的单链表构造方法 { head = null; #创建空链表 } public LinkList() #带头结点的单链表构造方法 { head = new Node<T>(); #创建空链表 }
再看看Python中来定义单链表:

class ListNode():
    def __init__(self, val):
        if isinstance(val, int):
            self.val = val
            self.next = None

        elif isinstance(val, list):
            self.val = val[0]
            self.next = None
            cur = self
            for i in val[1:]:
                cur.next = ListNode(i)
                cur = cur.next

    def gatherAttrs(self):
        return ", ".join("{}: {}".format(k, getattr(self, k)) for k in self.__dict__.keys())

    def __str__(self):
        return self.__class__.__name__ + " {" + "{}".format(self.gatherAttrs()) + "}"



最终代码实现(内含注释)

# 注释版
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:

        # 定义头节点,val赋值为0
        head_node = ListNode(0)
        node = head_node

        # 进位标识符carry,初值为0
        carry = 0

        # while循环,对两链表对应位和上一位产生的进位carry进行相加操作,并判断是否产生了进位,记录carry值
        while l1 !=None or l2 != None:
            l1_num = l1.val if l1 != None else 0
            l2_num = l2.val if l2 != None else 0
            num = (l1_num + l2_num + carry)%10
            carry = 1 if l1_num + l2_num + carry>= 10 else 0  # 判断是否产生进位
            node.next = ListNode(num)  # 在链表尾部添加本次循环所得节点
            node = node.next
            l1 = l1.next if l1 !=None else None  # l1指向下一节点
            l2 = l2.next if l2 !=None else None  # l2指向下一节点

        # 循环后若最高位产生了进位则在链表尾部添加一个val为1的节点
        if carry == 1:
            node.next = ListNode(1)

        # 最后结果舍弃头节点
        head_node = head_node.next
        return head_node


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用

我们都知道&#xff0c;现在越来越多的人开始使用护眼台灯照明了&#xff0c;不为别的&#xff0c;只为眼睛健康&#xff0c;所以同样的也有许多人质疑护眼灯是否真的对眼睛有效果&#xff0c;今天就来聊聊护眼灯是否真的有护眼作用。 在我看来&#xff0c;人体眼睛看任何事物…

TS201的通过外部中断IRQ0控制DMA传输(含参考代码)

外部中断控制DMA传输 DMA的原理就不多说了&#xff0c;之前的文章里有写。 电路中的Interrupt Pin ADSP-TS201 EZ-KIT Lite评估板上每片DSP含有4个外部中断(IRQ3–0 )&#xff0c;其中IRQ0接到了一个按键上&#xff08;SW4和SW5&#xff09;。 当按键按下时&#xff0c;表现…

西湖论剑 Flagshop 分析复现

前言 比赛时候没能做出来&#xff0c;其实这道题就是一道pwn题。后面与p w n师傅讨论分析EXP分析还原了解题过程。学到了很多&#xff0c;也希望分享给大家。 任意文件读取 抓包或者看源码就会发现有一个SSRF&#xff0c;但是没有权限读flag&#xff0c;测试发现存在一个readf…

全网惟一面向软件测试人员的Python基础教程-为什么要学Python

全网惟一面向软件测试人员的Python基础教程 起点&#xff1a;python软件测试实战宝典》目录 第一章 为什么软件测试人员要学习Python 文章目录全网惟一面向软件测试人员的Python基础教程前言一、Python是什么&#xff1f;二、为什么要学二、测试人员如何学二、怎么从0开始学Py…

旅行路线可视化研究与实现(Java+Android+Eclipse实现的旅游APP)

目 录 1 概论 1 1.1 研究现状 1 1.2 系统开发意义 1 1.3 系统开发背景 2 2 开发环境以及相关技术 5 2.1 Eclipse 5 2.2 Adroid 5 2.2.1 基本概念 5 2.2.2 简介 6 2.2.3 系统架构 6 2.2.4 四大组件 7 2.3 Java语言 7 2.4 SQLite 7 2.4.1 简介 7 2.4.2 架构 7 2.4.3 特点 8 2.5 F…

《Redis 深度历险:核心原理与应用实践》学习

1、Redis的5种基础数据结构 Redis的5种基础数据结构&#xff1a;string (字符串&#xff09;、list (列表 &#xff09;、hash (字典&#xff09;、 set (集合&#xff09;、zset (有序集合&#xff09;。 Redis所有的数据结构都以唯一的key字符串作为名称&#xff0c; 然后通…

基于粒子群优化算法的边缘链接用于边缘检测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

艾美捷FLIVO探针:用于细胞活体凋亡检测,助力科研!

细胞凋亡在胚胎发育、造血、免疫系统的成熟以及维护正常组织和器官的细胞恒定与生长平衡&#xff0c;乃至机体衰老方面都起着重要作用。因此&#xff0c;有关凋亡的研究在临床和基础等各个领域已经广泛开展,凋亡细胞的检测方法显得非常重要。 FLIVO(荧光活体)是一种强大的无创检…

首个搭载8MP摄像头的单SoC行泊一体方案来袭,已拿下多家车企定点

行泊一体正在进入前装规模化上车的关键周期&#xff0c;但同时产品的升级战争也在全面爆发。 《高工智能汽车》了解到&#xff0c;国内领先的智能驾驶技术供应商——AutoBrain重磅推出了国内首个搭载800万像素摄像头的单SoC行泊一体方案。据悉&#xff0c;这是全球量产首发搭载…

dubbo消费者访问不到docker里面的生产者

版本 dubbo3.0.7 Docker version 20.10.21, build baeda1f docker zookeeper lastest 背景 一个dubbo的项目&#xff0c;生产者和消费者之间使用zookeeper管理。 现将消者和zookeeper部署到了docker中&#xff0c;二者使用的都是桥接网络。 消费者仍然在idea中编写逻辑。 服…

正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?

在前文《什么是加成法、减成法与半加成法&#xff1f;》中&#xff0c;我们提到&#xff1a;减成法仍为当前PCB生产工艺的主流&#xff0c;那么&#xff0c;其中的两大代表工艺——正片工艺、负片工艺&#xff0c;又是怎样的呢&#xff1f; 请看下图&#xff1a; 当然&#xf…

一起用Go做一个小游戏(下)

打包资源使用file2byteslice包我们可以将图片和config.json文件打包进二进制程序中&#xff0c;之后编译生成一个二进制程序。然后拷贝这一个文件即可&#xff0c;不用再拷贝图片和其他配置文件了。golang有很多第三方包可以将打包资源&#xff0c;原理其实很简单——读取资源文…

面试官:使用 RocketMQ 怎么进行灰度发布?

今天来聊一聊 RocketMQ 的灰度方案。 灰度发布是指在黑与白之间&#xff0c;平滑过渡的一种发布方式。在大流量的系统中&#xff0c;如果一次升级改造范围比较大&#xff0c;或者影响内容不太确定&#xff0c;一般会采用切量的方式进行升级&#xff0c;这样可以减少生产变更带…

面试官:MySQL 中 varchar(n) 中 n 最大取值为多少?

前置知识 要回答这个问题&#xff0c;首先我们得先知道 MySQL 存储一条记录的格式长什么样子。 以 Compact 行格式作为例子&#xff0c;它长这样&#xff1a; 可以看到&#xff0c;一条完整的记录分为「记录的额外信息」和「记录的真实数据」两个部分。 这里重点讲讲记录的…

探究L298N模块烧毁的原因

目录 基础介绍 代码思路 基础介绍 L298N电机驱动版主要由两个核心组件构成&#xff1a; L298N 驱动芯片78M05 稳压器型号&#xff1a; L298N封装&#xff1a; Multiwatt15V 描述&#xff1a;电源电压&#xff1a;4.5V~46V 特性&#xff1a;过流保护(OCP)&#xff1b;过热保…

在线教程 | 用「网红项目」DeepSOCIAL 进行社交距离监测

By 超神经 内容一览&#xff1a;YOLO v4 是一个实时的、高精度的目标检测模型&#xff0c;本教程将详细讲解如何基于 YOLO v4 和 SORT 算法&#xff0c;实现在多目标条件下的人群距离检测。 关键词&#xff1a;YOLO v4 SORT 多目标检测 新冠疫情爆发初期&#xff0c;「保持…

VSCODE安装ChatGPT插件

zh1&#xff1a;首先在插件商店搜索ChatGPT中文版 然后点击安装就可以 2&#xff1a;chatGPT插件目前需要登陆账号才能使用&#xff0c;官方介绍下一个版本会有升级(不需要登陆) a:前往 ChatGPT 并登录或注册。 首先要先注册&#xff0c;注册的时候邮箱号可以填国内的也可以用…

利他合作,共赢未来 | 数商云全国渠道代理商招募政策发布

12月2日下午&#xff0c;以“利他合作&#xff0c;共赢未来”为主题的数商云全国渠道代理商招募政策发布会在广州顺利召开&#xff0c;与线上线下来自全国各地区的60家优质厂商共同解读数商云首次公开的招商政策、深入体验数商云全线产品体系&#xff0c;挖掘千亿数字化采购市场…

leecode#有效的电话号码#第十行#上升的温度

题目描述&#xff1a; 给定一个包含电话号码列表&#xff08;一行一个电话号码&#xff09;的文本文件 file.txt&#xff0c;写一个单行 bash 脚本输出所有有效的电话号码。 你可以假设一个有效的电话号码必须满足以下两种格式&#xff1a; (xxx) xxx-xxxx 或 xxx-xxx-xxxx。…

20个有用的Excel数据分析函数(教程含案例)

Microsoft Excel 是一种简单而强大的数据分析工具。Excel 是当今行业中广泛使用的软件应用程序,用于生成报告和业务洞察。Excel 包含超过 450 个函数,并且每年都会添加更多函数。在这里,我们介绍了那些主要用于数据分析的功能。 MAX/MIN MAX和MIN函数顾名思义。MAX将找到范…