LeetCode 306. 累加数(暴力回溯)
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. 累加数(暴力回溯)相关推荐
- 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 ...
- leetcode306. 累加数(回溯)
累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 '0'-'9' ...
- Java实现 LeetCode 306 累加数
306. 累加数 累加数是一个字符串,组成它的数字可以形成累加序列. 一个有效的累加序列必须至少包含 3 个数.除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和. 给定一个只包含数字 ...
- python数独伪代码回溯法_数独的暴力回溯解法和Python GUI
数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是"独个的数字"或"只出现一 ...
- LeetCode 22. 括号生成(回溯/DP)
文章目录 1. 题目 2. 解题 2.1 暴力回溯 2.2 DP 1. 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...
- LeetCode 47. 全排列 II(回溯+搜索剪枝)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...
- [leetcode]1.两数之和
[leetcode]1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应 ...
- [hashmap|空间换时间] leetcode 1 两数之和
[hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...
最新文章
- 网站性能优化之应用程序缓存-初篇
- css3之border-image
- mysql 5.7.14编译安装_源码编译安装mysql-5.7.14-阿里云开发者社区
- 【caffe-Windows】cifar实例编译之model的使用
- input file实现批量上传
- express中获取url参数
- cas java web,CAS干单点登陆(SSO)——集成Java Web 项目
- Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输
- 台式电脑键盘按键错乱_电脑键盘按键怕误触怎么办?用这款软件帮你屏蔽指定键盘按键!支持替换按键!...
- 分享各类AI资源,算法干货,我们是认真的!(附最全AI资源分享)
- SQL:pgsql插入数据
- HDU-1716 排列2 组合数
- 专题六:数值微积分与方程求解
- Storm之——实现井字棋游戏(人工智能)
- 2021新宁二中高考喜报成绩查询,新宁二中举行2021年高考倒计时100天誓师大会
- 拒绝烂图表,Excel商务图表小白篇
- C语言笔记第02章:三大基本结构
- m73p黑苹果_现阶段最便宜的完美黑苹果配置是什么?
- http系列之-核心内容
- android apk编译打包过程