给你两个链表,别离示意两个非负的整数。每个链表的节点示意一个整数位。
为了便利计划,整数的低位在链表头,比如:在链表中的示意方法是:
3-2-1
如今给你两个如此构造的链表,请输出它们乞降以后的后果。比如:
输入:(2-4-1)+(5-6-1)输出:7-0-3
代码模版本题的Swift代码模版下列:
privateclassListNode{publicvarval:Intpublicvarnext:ListNode?publicinit(_val:Int){self.val=valself.next=nil}}classSolution{funcaddTwoNumbers(_l1:ListNode?,_l2:ListNode?)-ListNode?{}}考核点
本题出自LeetCode上的第2题。
这是我高中研习编程时最先来往的一类题目,咱们把这种题目叫做「高精度计划」,本来便是在计划机计划精度不敷时,模仿咱们在纸演出算的方法来计划谜底,而后得到充实精度的解。
我还记得我7年前第一次去网易有道口试的时间,就考核的是一起宛如的高精度计划题目,比这道题繁杂很多,我那时用了一个对照笨的方法,加之那时仍然用C++写的,内存分派和释放写起来也对照费事,末了写了两页A4纸才写完。
这道题本来全部不考核甚么「算法」,人人都懂得何如计划,不过它侦查了「将主意调动成代码」的才力,新手时常犯的毛病便是:道理都知道,不过写不出来代码。因而,这种题目用来过滤菜鸟切实是挺灵验的方法。
谜底本题的做法本来没甚么希奇,便是直接计划。计划的时间需求琢磨到下列这些情景:
两个整数长度不一致的情景。
进位的情景。当进位形成时,咱们需求保管一个标识位,以便在计划下一位的和的时间,加赶上位。
当计划完后,假设尚有进位,需求管教末了后果加一位的情景。
下列是完好的代码,我应用了一些Swift言语的特征,比如用flatMap来节减关于Optional典型值为nil的决断。
privateclassListNode{publicvarval:Intpublicvarnext:ListNode?publicinit(_val:Int){self.val=valself.next=nil}}privateclassSolution{privatefuncgetNodeValue(_node:ListNode?)-Int{returnnode.flatMap{$0.val}??0}funcaddTwoNumbers(_l1:ListNode?,_l2:ListNode?)-ListNode?{ifl1==nil
l2==nil{returnl1??l2}varp1=l1varp2=l2letresult:ListNode?=ListNode(0)varcurrent=resultvarextra=0whilep1!=nil
p2!=nil
extra!=0{vartot=getNodeValue(p1)+getNodeValue(p2)+extraextra=tot/10tot=tot%10letsum:ListNode?=ListNode(tot)current!.next=sumcurrent=sump1=p1.flatMap{$0.next}p2=p2.flatMap{$0.next}}returnresult!.next}}
以上代码也也许从我的Gist中找到: