1. 题目

给定一个数字字符串 S,比如 S = “123456579”,我们可以将它分成斐波那契式的序列 [123, 456, 579]。

形式上,斐波那契式序列是一个非负整数列表 F,且满足:

  • 0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型);
  • F.length >= 3;
  • 对于所有的0 <= i < F.length - 2,都有 F[i] + F[i+1] = F[i+2] 成立。

另外,请注意,将字符串拆分成小块时,每个块的数字一定不要以零开头,除非这个块是数字 0 本身。

返回从 S 拆分出来的所有斐波那契式的序列块,如果不能拆分则返回 []。

示例 1:
输入:"123456579"
输出:[123,456,579]示例 2:
输入: "11235813"
输出: [1,1,2,3,5,8,13]示例 3:
输入: "112358130"
输出: []
解释: 这项任务无法完成。示例 4:
输入:"0123"
输出:[]
解释:每个块的数字不能以零开头,因此 "01","2","3" 不是有效答案。示例 5:
输入: "1101111"
输出: [110, 1, 111]
解释: 输出 [11,0,11,11] 也同样被接受提示:
1 <= S.length <= 200
字符串 S 中只含有数字。

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

2. 解题

  • 类似题目:LeetCode 306. 累加数(暴力回溯)
class Solution {string p, q, sum;
public:vector<int> splitIntoFibonacci(string S) {vector<int> ans;if(S.size() < 3)return ans;int i, j;for(i = 0; i < S.size()/2; ++i)for(j = i+1; j < S.size()-1; ++j){ans.clear();if(isok(S,ans,i,j))return ans;}return {};}bool isok(string& S, vector<int>& ans, int i, int j){p = S.substr(0,i+1);q = sum = "";if(p.size()!=1 && p[0]=='0')return false;bool flag = true;ans.push_back(toNum(p,flag));if(!flag)//超过int范围return false;while(j < S.size()){sum = "";q = S.substr(i+1,j-i);if(q.size()!=1 && q[0]=='0')return false;add(p,q);//字符串数字 加法if(j+sum.size() >= S.size() || sum != S.substr(j+1,sum.size()))return false;p = q;i = j;j += sum.size();ans.push_back(toNum(p,flag));if(!flag)return false;if(j == S.size()-1){ans.push_back(toNum(sum,flag));if(!flag)return false;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');}}int toNum(string& s, bool& flag){long n = 0;for(int i = 0; i < s.size(); i++){n = n*10+(s[i]-'0');if(n > INT_MAX){   flag = false;return -1;}}return int(n);}
};

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

  1. leetcode 842. 将数组拆分成斐波那契序列(回溯算法)

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

  2. 842. 将数组拆分成斐波那契序列

    链接:842. 将数组拆分成斐波那契序列 题解: class Solution {public:vector<int> splitIntoFibonacci(string S) {vect ...

  3. 《每日一题》842. Split Array into Fibonacci Sequence 将数组拆分成斐波那契序列

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

  4. leetcode842. 将数组拆分成斐波那契序列(回溯)

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

  5. Leetcode每日一题:842.split-array-into-fibonacci-sequenc(将数组拆分成斐波那契序列)

    思路:深度优先搜索,设定最后返回的数组vec,每次搜索只处理一个数,这数可以取1位,也可以取很多位,这取决于前面两个放入vec的数的和(vec只有两个及以下的数时,直接放入),如果无法等于他俩的和,那 ...

  6. 数字拆分为斐波那契数列_检查数字是否为斐波那契

    数字拆分为斐波那契数列 Description: 描述: We are often used to generate Fibonacci numbers. But in this article, w ...

  7. leetcode算法题--最长的斐波那契子序列的长度

    原题链接:https://leetcode-cn.com/problems/length-of-longest-fibonacci-subsequence/ 1.set暴力法 对于任一个斐波那契序列来 ...

  8. JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码)

    JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码) fibonacci.js完整源代码 fibonacci.js完整源代码 export default funct ...

  9. Java - 用数组求出斐波那契数列的前20项值

    斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为" ...

最新文章

  1. Linux驱动基础:MSM平台AP/CP通信机制
  2. 【盘它!】那些让效率MAX的工具和方法(Mac篇)
  3. lamp mysql脚本_初次尝试利用脚本自动编译搭建LAMP-----Mysql
  4. SQL中删除重复的行(重复数据),只保留一行 转
  5. remotepath != null 与 !TextUtils.isEmpty(remotepath) 的区别
  6. 【Siddhi】Siddhi 组件架构
  7. 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
  8. Redis内存数据库必读的4本书
  9. 什么是云计算机服务,云平台是什么意思 云服务平台有哪些【详细介绍】
  10. 内存优化(一)浅谈内存优化
  11. 实现unity内2D物品延迟跟随鼠标移动
  12. word to vector 文本向量化
  13. 哈尔滨双星计算机学校教学,哈尔滨计算机职业学校哪个好双星职业学校
  14. python证书微软认证费用_微软认证有哪些?费用多少?
  15. 时代和人民的精神脉动
  16. linux无缝拼接文件,在Makefile中无缝连接字符串
  17. 基于word2vec的虚假新闻检测系统
  18. Ubuntu18.04 使用 openssl制作自签名证书
  19. python写图片爬取软件_python制作微博图片爬取工具
  20. 和表头对齐 表格_表格的基本知识

热门文章

  1. kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...
  2. 程序员修炼之道--从小工到专家(一)
  3. 【腾讯优测干货分享】从压测工具谈并发、压力、吞吐量
  4. [转帖]Mootools源码分析-02 -- Utils
  5. Workflow WF Reference Links for 2009-02-13
  6. 读取 Radio 的值
  7. memset()、memcpy()、memcmp()的使用方法
  8. 单线程会导致死锁吗?
  9. Android-HIDL实例解析
  10. 一直想说的,技术职业化