js 实现两数相加的算法
关于算法 两数相加 (leetcod上的的一道算法题)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
首先我们要了解这道题究竟想得到一个什么答案,而且其中的过程是什么样的,这样才能更好的开展下一步操作.
如图所示 每一个矩形都是一个对象ListNode,对象中封装了两个值,一个是number类型的值val,另一个是ListNode类型的下一个对象,这样就形成了链表.
将l1与l2对位的val相加得到的值赋给结果链表.
这里必须考虑到这几种情况
进位 上下两个值相加得到的值溢出大于10需要进位到下一位当中
上下两个链表结点数不相同 没有对位值 怎么办
何时结束相加 如何判断接下来的节点是最后一个
如何将相加所得的值赋值给结果链表
var addTwoNumbers = function(l1, l2) {//首先需要创建结果链表的表头c对象 var c = new ListNode(0);//在创建一个ListNode对象 因为在接下来的操作中会反复操作结果节点,并且是单向链表,在返回值的时候,还需要用到 c 对象,以防最后找不到头节点 var result = c;//curry变量用于进位初始值设为0 在第一次相加时不需要这个变量,赋值为0 不会影响下面的操作var curry = 0;//设置一个while循环,每相加一次 需要对位节点向后移动, 如果都是null就代表相加结束while (l1 != null || l2 != null) {//解决两个链表节点数不相同的问题 如果没有对位节点就将对位节点设置为0 这样也不会影响结果var a = (l1 == null ? 0 : l1.val);var b = (l2 == null ? 0 : l2.val);//sum是上下两个节点的val值与进位上来的curry相加在与10取余所得,也是这个结果节点的值,符合相加原理 var sum = (a + b + curry) % 10;//分离出来进位的值curry = parseInt((a + b + curry) / 10);//这里是整个算法的核心,将值赋给下一个节点result.next = new ListNode(sum);//而将节点向后推result = result.next;//这里是判断上下两个链表的结束点,进行推移if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;}//如果在循环完成之后,curry进位还是大于0 ,根据加法原理 需要进位if (curry > 0) {result.next = new ListNode(curry);}//c节点是表头 返回有值的第一个节点return c.next;};
js 实现两数相加的算法相关推荐
- 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现
一.题目要求 给出两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字.请将两个数相加,并以相同形式返回一个表示和的链表(可以假设除了数字 0 之外 ...
- 两数相加——哈希表算法
力扣刷题总结 一.前言 二.两数相加 1.题意 2.示例 3.题目解析 4.官方题解 思路分析 哈希表算法的优势: 思路及算法: 代码分析 C语言代码实现及详细注释说明: python代码实现及详细注 ...
- 【每日一算法】两数相加
微信改版,加星标不迷路! 每日一算法-两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- js 数字相加_Python练习:解题 - 两数相加(JS, TS, PY3版)
两数相加 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...
- 算法实战(二)两数相加
一.前言 今天开始第二题,有句话写给自己也写给大家,Rome wasn't built in one day!算法很难,刷题的过程也很痛苦,但是只要我们能坚持下去,以后的收获将会是巨大的.希望我们都能 ...
- 【数据结构与算法】之深入解析“两数相加II”的求解思路与算法示例
一.题目要求 给你两个非空链表来代表两个非负整数,数字最高位位于链表开始位置,它们的每个节点只存储一位数字,将这两数相加会返回一个新的链表. 可以假设除了数字 0 之外,这两个数字都不会以零开头. 示 ...
- leetcode算法—两数相加 Add Two Numbers
关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 【LeetCode】2.两数相加
1.两数相加 一.问题描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表 ...
最新文章
- 强者愈强!疫情拉大“数据资产”贫富差距,顶级公司数据建设靠什么
- datetime对应的java类型_MySQL数据类型笔记
- [机器学习] 模型稳定度指标PSI
- Wix 安装部署(二)自定义安装界面和行为
- Linux实用代码--文件系统操作
- centos6.5 升级python2.6到python2.7
- 游戏框架设计【各大管理系统篇】
- 国际及港澳台电话国家代码表
- 超参数(Hyperparameter)
- 这十年,阿里开发者毕玄的日常
- 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
- android ip v6 teredo,Win7系统通过teredo连接IPv6的方法
- 2014年大数据解决方案提供商面临三大挑战
- Matlab画三维立体网状图形(类似魔方)
- ENVI 混合像元分解
- python tkinter 桌面小程序开发从入门到界面美化(主题应用推荐)
- 制造业ERP怎么创新与转型(阿朱说)
- ReXNet学习笔记 --- ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network
- 一文带你读懂 Promise
- google地图测距原码
热门文章
- Docker_02_Docker基本命令使用
- 湖北c语言二级考试真题,湖北省C语言二级考试训练题.ppt
- Python中整数移位及二进制串操作
- Pycharm撤销操作和代码跳转后退回操作以及消除波浪线操作快捷键
- 使用树莓派SPI接口实现RFID门禁功能
- Feature-Preserving Ultrasound Speckle Reduction via L0 Minimization
- Metabase学习教程:权限-2
- Java实现发送手机验证码
- WorldWind源码剖析系列:BMNG类构造函数深入分析
- vs莫名其妙断点失效的一种解决方法