题目描述

累加数是一个字符串,组成它的数字可以形成累加序列。
一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给定一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是累加数。
说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。

示例

输入: “112358”
输出: true
解释: 累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8

思路

对字符串进行切割,外层循环得到一个数组,内层循环将数组进行切割,得到第一个,第二个数,和其他数循环判断是否符合条件:
1.rest以前两数之和开头;
2.firstNum,secondNum,rest的0不在十位或十位以上;
如果符合就继续切割restStr,并把使用上一次循环的第二个数代替firstNum,把restStr切割掉的部分代替secondNum,继续循环,直到restStr.length = = = 0为止
用这些条件过滤掉不符合的情况,最后返回true

这里容易忽略一个情况,如果以前切割的arr里restStr本来就是一个空字符串,这种情况下是没有进入过判断是否符合条件的循环的,但是最后会直接返回true,比如测试用例"1023",这个情况就要在while循环前提前判断restStr是否刚开始就是空字符串,防止直接返回true

特殊情况:
对于num.length<=2的,直接返回false;
对于num.lngth===3的,由于不存在0出现在十位或以上,可以直接切割成三个字符串,如果前两者的和不等于第三个,返回false;

题解

/*** @param {string} num* @return {boolean}*/
var isAdditiveNumber = function (num) {let length = num.lengthif (length <= 2) { return false }if (length === 3) {let numArr = num.split("")if (Number(numArr[0]) + Number(numArr[1]) === Number(numArr[2])) {return true}return false}for (let i = 2; i <= length; i++) {let arr = num.slice(0, i)for (let j = 1, len = arr.length; j < len; j++) {let first = arr.slice(0, j)if (first.startsWith("0") && j !== 1) {break;}let second = arr.slice(j)let rest = num.slice(i);if (second.startsWith("0") && second.length !== 1) {continue;}if (rest.startsWith("0") && rest.length !== 1) {continue;}if (isFn(first, second, rest)) {return true;}}}return false
};
/**
* @param {string} restStr
*/
function isFn(first, second, restStr) {let firstNum = parseInt(first);let secondNum = parseInt(second);console.log(first, second, restStr)// 如果分割到底,前面只有俩字符串,最后一个字符串为空,直接返回falseif (restStr === "") {return false}while (restStr.length !== 0) {let sum = firstNum + secondNum + "";if (!restStr.startsWith(sum)) {return false;}restStr = restStr.slice(sum.length);if (restStr.startsWith("0") && restStr.length !== 1) {return false;}firstNum = secondNum;secondNum = parseInt(sum);}return true;
}

性能

leetcode 306 累加数(js)相关推荐

  1. C# LeetCode刷题 - Leetcode 306. 累加数 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  2. C#版 - Leetcode 306. 累加数 - 题解

    C#版 - Leetcode 306. 累加数 - 题解 306.Additive Number 在线提交: https://www.gaimor.cn 累加数是一个字符串,组成它的数字可以形成累加序 ...

  3. LeetCode 306. 累加数(暴力回溯)

    1. 题目 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 '0 ...

  4. Java实现 LeetCode 306 累加数

    306. 累加数 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 ...

  5. leetcode 29.两数相除

    leetcode 29.两数相除 题目描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 ...

  6. LeetCode 454. 四数相加 II 思考分析

    题目 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单化,所有 ...

  7. leetcode306. 累加数(回溯)

    累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 '0'-'9' ...

  8. LeetCode 248. 中心对称数 III(DFS/BFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low ...

  9. LeetCode 247. 中心对称数 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 找到所有长度为 n 的中心对称数. 示例 : 输入: n = 2 ...

最新文章

  1. Swift3.0语言教程获取C字符串
  2. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
  3. 邂逅 2008-06-27 23:24
  4. 觉得UtraWebGrid老不稳定
  5. 类加载、类加载器、反射
  6. php打印函数链,如何通过在PHP中使用包含该链的字符串来链接调用函数
  7. 书还可以这样做?3分钟扒光这本变态级作品 | 文末有福利
  8. 网站缓存数据实时更新的实现
  9. IBM发布人工智能显微镜,可检测海洋水资源
  10. 强大的端到端语音识别框架—RNN-T
  11. 汽车电子产品EMC测试项目、测试标准
  12. excel午晚加班考勤统计(excel快速计算午多少个和晚多少个)
  13. 洋桃开发板笔记(五 ) Flash闪存的使用
  14. 服务器虚拟化的毕业设计,虚拟化技术毕业论文题目精选
  15. zabbix 批量生成聚合图形
  16. 程序员叫啥名字_网友:什么是好程序员?腾讯员工:首先起个“配”自己的网名!...
  17. Mac 下修改文件的 md5 值
  18. siamfc-pytorch代码讲解(三):demotrack
  19. 2018最新版省市区三级联动下拉框+所有源代码以及数据库
  20. PCIe 5.0 spec学习4.1----PCI-PM(part1)

热门文章

  1. PS和AE结合设计的进度条,有图有视频(秒懂)
  2. HP工作站如何在BIOS下开启、关闭安全芯片
  3. 数据分析面试手册《指标篇》
  4. QT编译时查找不到GL /usr/bin/ld cannot find -lGL
  5. 解决Mac电脑连不上wifi的问题
  6. ASA广告投放策略:建立、更新你的关键词库
  7. 怎么实现红鲤鱼与绿鲤鱼与驴代码
  8. JAVA求数组最大值最小值总和均值
  9. dcos -1.7 都有哪些服务
  10. 软工实践 - 第十一次作业 Alpha 冲刺 (3/10)