当前位置: 首页 > 编程日记 > 正文

leetCode刷题 2. 两数相加

原题链接:

leetcode-cn.com/problems/ad…

题目描述

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
复制代码

题目解析:

题目的前提,将数字使用链接来存储,比如数字 123 ,储值为3->2->1。个位数在前,接着是十位、百位......。

要做的事情是:2个数字,都使用了链表来存储,我们需要将这两个数字相加,得到他们的和,将他们相加的结果存储成跟之前一样结构的链表。

需要做题者熟悉链表结构和链表的遍历。

思路

思路一:

链表毕竟是链表,无法直接简单地进行相加操作。所以比较容易想到的思路是,两个链表分别转化成数字,然后将两个数字相加,得到了和之后,再将结果转化成链表。

思路二:

由于是链表是个数在前,接着是十位、百位......所以可以同时遍历两个链表,然后将遍历出来的元素进行相加,将结果转化成新链表的元素。这样新链表就是题目所要求的链表。需要注意的事,相加可能会有进位出现,比如9+9=18,此时新元素应该是8,然后下一个元素的时候应该加上这个进位1。

代码(Python2)

思路一代码

 #方法一。将两个链接分别转成数组,然后转成数组,进行相加运算。得到的结果再转成数组,然后转成链表。def addTwoNumbers(self, l1, l2):""":type l1: ListNode:type l2: ListNode:rtype: ListNode"""#遍历解析第1个数head1 = l1a1 = []while (head1):a1.append(head1.val)head1 = head1.nextprint "a1=",a1#遍历解析第2个数head2 = l2a2 = []while (head2):a2.append(head2.val)head2 = head2.nextprint "a2=",a2 #将第1个数组转成数字num1 = 0len1 = len(a1)for i in range(len1):# print "i=",inum1 += a1[i]*(10**i)print "num1=",num1    #将第2个数组转成数字num2 = 0len2 = len(a2)for i in range(len2):# print "i=",inum2 += a2[i]*(10**i)print "num2=",num2num = num1 + num2print "num=",num#特殊情况,直接返回if num == 0:node = ListNode(0)return node#将num转成数组a = []i = 1while (num != 0):temp = num % (10)num = num / (10)print "temp=",tempprint "num0=",numa.append(temp)i += 1print "a=",a#将数组转成链表node = ListNode(a[0])head = nodefor i in range(1,len(a)):newNode = ListNode(a[i])head.next = newNodehead = head.nexthead.next = Nonereturn node
复制代码

思路2代码:

#方法二:同时遍历两个链表,将对应位的数子相加。如果有进位就记录下来。def addTwoNumbers(self, l1, l2):""":type l1: ListNode:type l2: ListNode:rtyp"""#头结点head = None#当前节点currentNode = None#进位carry = 0#是否第一次遍历isFirst = Truewhile (l1 or l2 or carry != 0):#置0val1 = 0val2 = 0#计算val1if l1:val1 = l1.vall1 = l1.next#计算val2if l2:val2 = l2.vall2 = l2.next#计算val,注意进位也要加val = val1 + val2 + carry#大于10的时候表示有进位if (val/10 > 0):carry = 1val = val%10else:carry = 0#创建节点node = ListNode(val)if isFirst:#第一次创建节点做特殊处理currentNode = nodehead = currentNodeisFirst = Falseelse:currentNode.next = nodecurrentNode = currentNode.nextreturn head
复制代码

谦言忘语

个人目前只懂一丁点python语法,所以不做语法上的优化,而且整体代码风格效果会尽量跟C语言趋于一致。

相关文章:

【Qt】pro 笔记

一、小技巧 1、获取pro文件所在目录的最后一级目录名 LASTDIR = $$relative_path($$_PRO_FILE_PWD_, $$_PRO_FILE_PWD_/..)2、获取变量的值 $$VAR:获取变量值; $${VAR}:获取变量值,{}的存在可以和后面的字符做隔离; $$(VAR):在执行qmake时,获取环境变量的值; $(VAR)…

7——ThinkPhp中的响应和重定向:

public function index3(){//响应数据:$data[title>"标题部分","content">"内容部分"];//return json($data);//return json($data,201);//return xml($data);//请求信息给模板:$this->assign(name,xiaoming222)…

GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!

参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 大会议题以及更多详情请查看:https://pythondevdays2019.csdn.net/ 作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 近日,一个在 GitHub 上开源即收获了 3700 Star 的项…

Android模拟器SD卡的使用

在Eclipse中,操作如下: 在设置了RUN的命令参数之后,RUN一个应用,然后使用DDMS的File Explorer工具导入导出文件。 打开DDMS工具:在Eclipse的Window->Open Perspective->Other...里面打开DDMS工具。 在DDMS的File…

受用一生的高效PyCharm使用技巧

参加 2019 Python开发者日,请扫码咨询 ↑↑↑作者 | Python编程时光转载自Python编程时光(ID:Python-Time)今天先从 PyCharm 入手,写一些可以明显改善开发效率的使用技巧,一旦学会,受用一生。以下代码演示是…

【Go】Go基础(一):Hello World!

1、 C格式hello.go package main import "fmt"func main(){fmt.Printf("Hello World!\n"); }2、编译 go build hello.go3、运行 执行go build编译后,会在当前目录下生成名为hello的可执行程序。 $ ./hello Hello World!4、Go格式的hello.g…

centos7上搭建http服务器以及设置目录访问

参考文献:http://www.jb51.net/article/137596.htm,原文摘抄如下,并根据具体需要作了相应的修改。 步骤: 1. 安装httpd服务 sudo yum install httpd Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d 。网站…

一文看懂深度学习发展史和常见26个模型

参加 2019 Python开发者日,请扫码咨询 ↑↑↑来源 | AI部落联盟(ID:AI_Tribe)作者简介:沧笙踏歌,硕士毕业于北京大学,目前计算机科学与技术博士在读,主要研究自然语言处理和对话系统…

JBL无所不能与IPhone4、IPad2的完美盛宴

期待以久JBL白版终于到货了,由于水货的供电参数是110V~200V,行货是110~220V,所以本人选择了行货,因为水货的供电和国内的输入电压不符,时间用久了会影响小J寿命。经过测试后本人发现,用JBL无所不能连接IPho…

【Go】Go基础(二):学习网址汇总

Go语言中文网站 https://studygolang.com/ Go语言标准库文档 https://studygolang.com/pkgdoc 《The Way to Go》中文名《Go 入门指南》 https://github.com/Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md…

堆和栈的主要区别由以下几点:

1、管理方式不同;2、空间大小不同;3、能否产生碎片不同;4、生长方向不同;5、分配方式不同;6、分配效率不同;管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制&a…

参与2011年7月13日举行的Azure国际猜拳锦标赛,赢取5,000美元大奖

你想要编写自己的“bot”角色并测试你的技能,在线同来自美国,加拿大,中国,德国,新西兰,瑞典和英国的Windows Azure开发者一教高下,并赢取5,000美元大奖吗?请先注册Azure国际猜拳锦标…

【Go】Go基础(三):基本结构和基本数据类型

1、Go程序源码结构 我们将一个Go程序的源码暂时称为一个项目 : 每个项目由若干个包组成; 每个包由同一个目录中的若干个go文件组成; 每个go文件中由若干函数、变量、常量等组成; 每个函数由流程控制语句、变量、常量、运算符和函…

2019如何学Python?这里有你需要的答案

点击上方↑↑↑蓝字关注我们~参加 2019 Python开发者日,请扫码咨询 ↑↑↑编辑 | Jane出品 | Python大本营(公众号id:pythonnews)根据 2018 年 Python 开发者大调查,Python 3 的渗透率已经快速增长至 84%,越…

Cisco HSRP热备份路由器协议配置

HSRP热备份路由器协议: HSRP是 Hot Standby Routing Protocol(热备份路由协议)的缩写,它的作用是当核心路由器不能正常工作时, 备用路由器能够实现自动平滑的替换,以保证网络正常使用。该协议中含有多台路由…

FTP与TFTP的区别

文件传输协议(FTP)实际上就是传输文件的协议,它可以应用在任意两台主机之间,但是FTP不仅仅是一个协议,它同时也是一个程序。作为协议,FTP是被应用程序所使用的;而作为程序,用户需要通过手动方式来使用FTP并完成文件的传送。FTP允许执行对目录和文件的访问,并且可以完…

写给NLP研究者的编程指南

点击上方↑↑↑蓝字关注我们~参加 2019 Python开发者日,请扫码咨询 ↑↑↑作者 | 赤乐君,日本某大手研发部门的NLP工程师。关注关系抽取与知识图谱的相关研究。来源 | 赤乐君的知乎专栏最近AllenNLP在EMNLP2018上做了一个主题分享,名为“写给…

【数据库】sqlite3常用命令及SQL语句

【数据库】sqlite3数据库备份、导出方法汇总 一、准备工作 0、安装SQLite3 1)ubuntu命令安装(不是最新版本) sudo apt install sqlite32)源码安装(可以安装最新版本) 下载: https://www.sq…

资本主义社会是不存在人道的

对叙利亚人民感到无助而写点文章,虽然没有什么大的作用,也谈谈自己对于战争与和平的理解,战争与和平就相当于爱与恨一样,爱的热切,恨之入骨,虽然形容不当,人性的双面总是要拿来剖析一二的。 人类…

再谈javascript图片预加载经典技术

图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展示出来,所以lightb…

【Go】Go基础(四):流程控制(控制结构)

1、if-else结构 格式: if condition1 {// do something } else if condition2 {// do something else } else {// default }和C的不同,条件语句没有大括号; 新增的语法: if initialization; condition {// do something }例…

让世界零距离 小鱼易连的大梦想

“他是高材生,也是技术大拿。十年北美,十年中国,他在高科技领域善于创新、精于管理,五项中美专利加身。他在北电网络领导团队不断创新,成就亚太顶尖;他曾任宝利通全球高管,带领团队从初创一路起飞&#xff…

程序员再也不能埋头敲代码了

上周,阿里巴巴重磅发布了机器学习平台 PAI 3.0 版本,据悉,这个 PAL 平台封装了 200 多种经典算法,可以轻松搭建机器学习实验。作为码农一枚,使我不得不抬起原本一直低着敲代码的头,看看这个为 AI 狂欢的世界…

函数的重载 - C++快速入门06

函数的重载 让编程改变世界 Change the world by program 函数的重载 C 里的函数重载(overloading)机制比我们此前见到的东西都高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。 所谓函数重载的实质就是用同样的名字再定义一个有…

【Go】Go基础(五):函数

1、简述 Go 里面有三种类型的函数: * 普通的带有名字的函数 * 匿名函数或者lambda函数 * 方法(Methods)两个特殊函数:main()和init(),它们没有参数和返回值; Go语言里面没有函数重载; 2、函数…

搬箱轮滑再炫技!一个被波士顿动力耽误的机器人

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)据 TheVerge 等多家外媒报道,波士顿动力公司 (Boston Dynamics) 又推出了一款新的机器人&…

我是如何在天猫、蚂蚁金服、百度等大厂面试中被拒的 | 掘金技术征文

本人16年毕业于普通二本院校网络相关专业,工作经验两年半,目前就职业于一家普通民营企业。 由于非985、211学历硬伤,校招进大厂的门槛远高于同届985、211的毕业生。于是乎,从毕业到现在经历了三家创业公司,创业公司的痛…

solaris上的pkg管理

原文写于2010-05-18 19:43:40 网易博客,已删. 在solaris上安装程序,很多时候多离不开package管理.上的编译好的软件都是已package的形式压缩好然后提供给大家下载的. 关键是3个命令:pkgadd/pkginfo/pkgrm pkgadd -d pkgname用来添加安装包 pkginfo 用来打印系统…

【Go】Go基础(六):数组、切片slice、映射map

1、数组 1.1 数组定义 数组:数组是具有相同 唯一类型 的一组已编号且长度固定的数据项序列。 数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以[5]int和[10]int是属于不同类型的。数组长度最大为 …

语义表征的无监督对比学习:一个新理论框架

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑译者 | Linstancy责编 | 琥珀出品 | AI科技大本营(ID:rgznai100)诸如图像、文本、视频等复杂数据类型的语义表征 (也称为语义嵌入) 已成为机器学习的核心…