题目:算法(leetode,附思维导图+全解)300题(二)二数相加简介:项目&作者1GitHub-LeetCode项目仓库0)本项目地址:https://github.com/CYBYOB/algorithm-leetcode。目标与愿景:让大家具备一定的算法能力,在面试中应对算法(能举一反三的同学也能融入自己的肌肉和血液,甚至为公司的业务和技术赋能)。1)项目根目录下的README.md文件可以帮助你快速查看每道题的出处、难度、所有解法。2)在每道题的解法(即index.md文件)中,还会有题目的描述,所有题解的思维导图(.xmind文件),思路和技巧等。3)每道题的解法都有详细的说明笔记,抽象的算法逻辑通过“数字步骤”清晰、层次分明地展现在你面前。可以说是开箱即用~4)所有问题的解决都是作者自己完成的,所以代码风格极其统一。一旦阅读到了一定的量,以后你的阅读速度就会有很大的提升——“俗话说,量变导致质变”。5)我还是每周更新——保证每周都有新题新解,刺激你的神经和刷题欲望。欢迎对算法感兴趣的同学加入我们的社区。QQ群:933919972;作者QQ:1520112971;作者VX:c13227839870(可以拉你进群,一起学习交流~)。2作者标签1)“伪全栈工程师,专注前端,偶尔写写后端”。2)2019微信小程序应用开发大赛-全国三等奖;2019CODA大赛-Top17/211,获得“优秀团队”等称号3)“半自媒体人”,在校期间,个人公众号(IT三少。新自媒体(公众号)编号:马农三少)实现了半年0到5.8K+的粉丝增长等等。1.题目描述2.方案概览(思维导图)3.全部方案1方案11)代码:varaddTwoNumbers=function(l1,l2){//获取链表表示的值constgetValueByLink=(link)=>{letresVal=0//weight表示当前仓位的权重,10的“整数次幂”weight=1;while(link){resVal+=(link.val*weight);//权重乘以10,链表的位置向后移动weight*=10;链接=链接.下一个;}返回值;}constval_1=getValueByLink(l1),val_2=getValueByLink(l2);让sum=val_1+val_2;//根据sum值不断遍历,把对应的位置值输入curLink//如果sum=807,则resLink=[7,0,8]constresLink=curLink=newListNode(sum%10);sum=parseInt(sum/10);while(sum){//curLink连续显示当前sum值的“个位数”。总和不断地分配给parseInt(sum/10)curLink.next=newListNode(sum%10);curLink=curLink.next;//不要写错sum/=10,缺少parseInt!!sum=parseInt(sum/10);}returnresLink;}2Program21)Code:varaddTwoNumbers=function(l1,l2){letresArr=[],//carry是否有进位(取值范围必须为[0,1])carry=0;//1)继续向后拉动2个链表while(l1&&l2){resArr.push((l1.val+l2.val+carry)%10);进位=parseInt((l1.val+l2.val+进位)/10);l1=l1.下一个;l2=l2.下一个;}//2)确定l1和l2的长度。让tmpLink=l1?l1:l2;while(tmpLink){resArr.push((tmpLink.val+carry)%10);进位=parseInt((tmpLink.val+进位)/10);tmpLink=tmpLink.next;}//3)最后一位可能有进位-需要继续if(carry){resArr.push(carry);}//因为有两个非空链表,遍历resArr就把对应位置的值放入resLink//resLink是返回的“链表头”,curLink用来存放“遍历得到的值”letresLink=curLink=newListNode(resArr[0]),i=1,l=resArr.length;while(i
