leetcode306. 累加数(回溯)
累加数是一个字符串,组成它的数字可以形成累加序列。
一个有效的累加序列必须至少包含 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. 累加数(回溯)相关推荐
- LeetCode 306. 累加数(暴力回溯)
1. 题目 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 '0 ...
- C#版 - Leetcode 306. 累加数 - 题解
C#版 - Leetcode 306. 累加数 - 题解 306.Additive Number 在线提交: https://www.gaimor.cn 累加数是一个字符串,组成它的数字可以形成累加序 ...
- C# LeetCode刷题 - Leetcode 306. 累加数 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- 编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数
题目 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 '0'-' ...
- leetcode2021年度刷题分类型总结(三)回溯法 (python)
主要参考:代码随想录 分为三个部分对回溯法进行总结 1.组合 例一:77. 组合 组合问题关键在于[1,4]和[4,1]算作重复答案,也即取数时往前推进,取到4时不能回头取1,所以每次都要记录取到的位 ...
- [Leetcode] 第306题 累加数
一.题目描述 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 ' ...
- LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)
1. 题目 给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列 ...
- JAVA练习10-累加数
累加数 是一个字符串,组成它的数字可以形成累加序列. 一个有效的 累加序列 必须 至少 包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给你一个只包含数字 '0' ...
- FPGA之道(59)时空变换之时域优化
文章目录 前言 时空变换之基本概念 时空概念简介 时空变换方案 时空变换之时域优化 逻辑化简 逻辑化简讨论 空域方面的颠倒现象 时域方面的颠倒现象 逻辑化简总结 结构调整 分布调整 思路转换 提前进位 ...
最新文章
- 浅析企业网站软文效果是如何展现的?
- 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
- 【转】程序员健康建议
- spark shuffle再补充
- Homogeneous Coordinates(齐次坐标)
- 操作系统内存管理--简单、页式、段式、段页式
- jQuery学习笔记(五)
- 右左法则解决复杂声明
- android 开源框架
- McAfee (麦咖啡) 360安全卫士 金山毒霸2008正式免费升级版 超级巡警 IceSword(冰刃)
- CV | Max Flow / Min Cut 最大流最小割算法学习
- 南京师范计算机科学研究生分数线,2020南京师范大学考研复试分数线已公布
- 如何在SSD和HDD VPS主机之间进行选择
- 京东到家评价系统存储架构演进
- 在虚幻引擎4中播放视频文件超详细教程
- 苏嵌嵌入式linux实训 第1天
- 护眼台灯哪个牌子最好?被央视315表扬的护眼灯
- ctr 平滑_ctr平滑
- cocos2d-x3.x实现屏幕画线并添加刚体属性
- 2022哈工大软件构造lab1小结(知识点)