累加数是一个字符串,组成它的数字可以形成累加序列。

一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。

给定一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是累加数。

说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。

示例 1:

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

解题思路

字符串实现大数相加,保证了不会溢出

代码

class Solution {boolean isa=false;public boolean isAdditiveNumber(String num) {additiveNumber(num,0,new ArrayList<>());return isa;}public String  sadd(String num1,String num2) {//字符串相加int carry=0;int n=num1.length()-1,m=num2.length()-1;StringBuilder strijavangBuilder=new StringBuilder();while (n>=0||m>=0||carry>0){int o1=n>=0?num1.charAt(n)-'0':0;int o2=m>=0?num2.charAt(m)-'0':0;stringBuilder.append((char)((carry+o1+o2)%10+'0'));carry=(carry+o1+o2)>=10?1:0;n--;m--;}return stringBuilder.reverse().toString();}public void additiveNumber(String num,int pos,List<String> temp) {if(pos==num.length())//遍历到了末尾{if(temp.size()>=3)isa=true;return ;}for(int len=1;len+pos<=num.length();len++){if(isa) break;String s=num.substring(pos,pos+len);if(s.length()>1&&s.charAt(0)=='0') continue;if(temp.size()>=2){if(sadd(temp.get(temp.size()-1),temp.get(temp.size()-2)).equals(s))//判断是否相等{temp.add(s);additiveNumber(num, pos+len, temp);temp.remove(temp.size()-1);//回溯}}else{//不够3个数就直接加进去temp.add(s);additiveNumber(num, pos+len, temp);temp.remove(temp.size()-1);}}}
}

leetcode306. 累加数(回溯)相关推荐

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

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

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

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

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

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

  4. 编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数

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

  5. leetcode2021年度刷题分类型总结(三)回溯法 (python)

    主要参考:代码随想录 分为三个部分对回溯法进行总结 1.组合 例一:77. 组合 组合问题关键在于[1,4]和[4,1]算作重复答案,也即取数时往前推进,取到4时不能回头取1,所以每次都要记录取到的位 ...

  6. [Leetcode] 第306题 累加数

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

  7. LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)

    1. 题目 给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列 ...

  8. JAVA练习10-累加数

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

  9. FPGA之道(59)时空变换之时域优化

    文章目录 前言 时空变换之基本概念 时空概念简介 时空变换方案 时空变换之时域优化 逻辑化简 逻辑化简讨论 空域方面的颠倒现象 时域方面的颠倒现象 逻辑化简总结 结构调整 分布调整 思路转换 提前进位 ...

最新文章

  1. 浅析企业网站软文效果是如何展现的?
  2. 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
  3. 【转】程序员健康建议
  4. spark shuffle再补充
  5. Homogeneous Coordinates(齐次坐标)
  6. 操作系统内存管理--简单、页式、段式、段页式
  7. jQuery学习笔记(五)
  8. 右左法则解决复杂声明
  9. android 开源框架
  10. McAfee (麦咖啡) 360安全卫士 金山毒霸2008正式免费升级版 超级巡警 IceSword(冰刃)
  11. CV | Max Flow / Min Cut 最大流最小割算法学习
  12. 南京师范计算机科学研究生分数线,2020南京师范大学考研复试分数线已公布
  13. 如何在SSD和HDD VPS主机之间进行选择
  14. 京东到家评价系统存储架构演进
  15. 在虚幻引擎4中播放视频文件超详细教程
  16. 苏嵌嵌入式linux实训 第1天
  17. 护眼台灯哪个牌子最好?被央视315表扬的护眼灯
  18. ctr 平滑_ctr平滑
  19. cocos2d-x3.x实现屏幕画线并添加刚体属性
  20. 2022哈工大软件构造lab1小结(知识点)

热门文章

  1. 九大经典算法之插入排序、希尔排序
  2. 基本TCP套接字编程
  3. 揭秘!双非渣本Android四年磨一剑,学习路线+知识点梳理
  4. 小企业服务器设置位置,小企业服务器配置
  5. php session 释放,php中删除Session和销毁Session的方法
  6. 老生常谈:抽象工厂模式
  7. 280. Wiggle Sort
  8. PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中
  9. nhibernate many-to-one 没有匹配项时的异常
  10. 管理者的困境:放权或者崩溃