1. 题目

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

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

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

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

示例 1:
输入: "112358"
输出: true
解释: 累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8示例 2:
输入: "199100199"
输出: true
解释: 累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199进阶:
你如何处理一个溢出的过大的整数输入?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

依次枚举所有的可能的前两个数的组合,按照该组合向后验证

class Solution {string sum, p, q;
public:bool isAdditiveNumber(string num) {int i, j;if(num.size()<3)return false;for(i = 0; i < num.size()/2; i++) {for(j = i+1; j < num.size()-1; j++){sum = p = q = "";if(isAdd(num,i,j))return true;}}return false;}bool isAdd(string& num, int i, int j) {p = num.substr(0,i+1);//第一个数if(p.size() != 1 && p[0] == '0')//以0开头return false;while(j < num.size()){sum = "";q = num.substr(i+1,j-i);//第二个数if(q.size() != 1 && q[0] == '0')//以0开头return false;add(p, q);//大数加法,得到sum字符串if(j+sum.size() >= num.size() || sum != num.substr(j+1,sum.size()))return false;p = q;i = j;j += sum.size();if(j == num.size()-1)break;}return true;}void add(string& a, string& b){int i = a.size()-1, j = b.size()-1, carry = 0, bit, s;while(i >= 0 || j >= 0 || carry){s = carry+ (i>=0 ? a[i--]-'0' : 0) + (j>=0 ? b[j--]-'0' : 0);bit = s%10;carry = s/10;sum.insert(0,1,bit+'0');}}
};

LeetCode 306. 累加数(暴力回溯)相关推荐

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

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

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

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

  3. leetcode306. 累加数(回溯)

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

  4. Java实现 LeetCode 306 累加数

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

  5. python数独伪代码回溯法_数独的暴力回溯解法和Python GUI

    数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是"独个的数字"或"只出现一 ...

  6. LeetCode 22. 括号生成(回溯/DP)

    文章目录 1. 题目 2. 解题 2.1 暴力回溯 2.2 DP 1. 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...

  7. LeetCode 47. 全排列 II(回溯+搜索剪枝)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...

  8. [leetcode]1.两数之和

    [leetcode]1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应 ...

  9. [hashmap|空间换时间] leetcode 1 两数之和

    [hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...

最新文章

  1. 网站性能优化之应用程序缓存-初篇
  2. css3之border-image
  3. mysql 5.7.14编译安装_源码编译安装mysql-5.7.14-阿里云开发者社区
  4. 【caffe-Windows】cifar实例编译之model的使用
  5. input file实现批量上传
  6. express中获取url参数
  7. cas java web,CAS干单点登陆(SSO)——集成Java Web 项目
  8. Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输
  9. 台式电脑键盘按键错乱_电脑键盘按键怕误触怎么办?用这款软件帮你屏蔽指定键盘按键!支持替换按键!...
  10. 分享各类AI资源,算法干货,我们是认真的!(附最全AI资源分享)
  11. SQL:pgsql插入数据
  12. HDU-1716 排列2 组合数
  13. 专题六:数值微积分与方程求解
  14. Storm之——实现井字棋游戏(人工智能)
  15. 2021新宁二中高考喜报成绩查询,新宁二中举行2021年高考倒计时100天誓师大会
  16. 拒绝烂图表,Excel商务图表小白篇
  17. C语言笔记第02章:三大基本结构
  18. m73p黑苹果_现阶段最便宜的完美黑苹果配置是什么?
  19. http系列之-核心内容
  20. android apk编译打包过程

热门文章

  1. 【Java】jdk 1.8 新特性——Lambda表达式
  2. Linux进程全解3——进程概念、进程ID、多进程调度原理
  3. 计算机用户登录设置成2000,2008计算机等级考试:Windows2000系统选项设置
  4. 头像和Karma汽车
  5. 获取指定日期所属年份的第一天日期或最后一天日期
  6. C++primer拾遗(第八章:IO库)
  7. input中的disabled 和 readonly的区别
  8. 关于有多个Fragment中的textview跑马灯问题
  9. Java中文乱码处理
  10. ActionScript 3.0 组件!