842. Split Array into Fibonacci Sequence

文章目录

  • 1 题目理解
  • 2 回溯

1 题目理解

输入:一个数字字符串S。例如S=“123456579”。
规则:我们可以把这个字符串分割为菲波那切数列,例如:[123, 456, 579]。
一个菲波那切数列需要符合以下条件:
1 0<=F[i]<=231−10 <= F[i] <= 2^31 - 10<=F[i]<=2311,也就是正整数
2 F[i] + F[i+1] = F[i+2] for all 0 <= i < F.length - 2.
3 在切割过程中每一块不能有前导0,例如"01"这样是错误的。但可以是"0"和"1"。
输出:分割后的菲波那切数列。如果不能分割返回空列表。

Example 1:
Input: “123456579”
Output: [123,456,579]

2 回溯

例如S=“123456579”
我们在处理’1’的时候,可以分割为1,12,123,1234… ,123456579
在处理’2’的时候,可以分割为2,23,234,…,23456579
在处理’3’的时候,可以分割为3,34,…,3456579,但是分割后能不能用,需要判断是不是符合F[i-1] + F[i-2] = F[i]。符合的话可以继续处理,否则就返回。


一直处理到最后,如果列表长度大于等于3,则说明分解成功。

class Solution {private String s;public List<Integer> splitIntoFibonacci(String S) {this.s = S;List<Integer> result = new ArrayList<Integer>();boolean r = dfs(0,result);return r ? result : new ArrayList<Integer>();}private boolean dfs(int start,List<Integer> list){if(start == s.length() && list.size()>2) return true;for(int i=start;i<s.length();i++){if(s.charAt(start)=='0' && i>start) break;String str = s.substring(start,i+1);if(Long.parseLong(str) > Integer.MAX_VALUE) break;int n = Integer.parseInt(str);if(list.size()>1){if(n==list.get(list.size()-1)+list.get(list.size()-2)){list.add(n);if(dfs(i+1,list)) return true;list.remove(list.size()-1);}}else{list.add(n);if(dfs(i+1,list)) return true;list.remove(list.size()-1);}}return false;}
}

需要注意:字符串中可能包含0;F[i]的取值范围是正整数。我第一次刷题是在5月12日,犯了这两个错误。第二次刷题是在12月24日,依然犯了这两个错误。说明在这期间,我看题目的思维没有升级。关心了输入、输出、规则,不太在意,题目中特别说明的地方,以及每个题目在例子后面还有的说明部分。

时间复杂度:对于官方解释的我不大能明白。但有些部分可以接受。n是字符串长度。
回溯枚举过程其实枚举的是前两个数字。当前两个数字确定之后,后面的数字都确定了。回溯的过程只是一个确认的过程,时间复杂度O(n)。
枚举前两个,最坏情况下,第一个有n种枚举,第二个有n-1种枚举。所以是O(n∗(n−1))O(n*(n-1))O(n(n1)),也就是O(n2)O(n^2)O(n2)
所以最终,最坏时间复杂度O(n3)O(n^3)O(n3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百零七期:她说,嫁人就选程序员!

又是一年双十一&#xff0c;单身狗们还好吗?想脱单?找个程序猿/程序媛是不错的选择&#xff0c;要不要了解一下? 作者&#xff1a;李二狗 图片来自 Pexels 程序员&#xff0c;已经渐渐成当代相亲市场的一只主力军。甚至可以说是“香饽饽”。 越来越多的妹子&#xff0c;在…

第一百零八期:比较容易理解的Hbase架构全解,10分钟学会,建议收藏

依然是Hadoop组件的讲解&#xff0c;今天说到HBase 架构&#xff0c;都是一字一句打出来的&#xff0c;希望各位转发加关注&#xff0c;会一直给大家写优质的内容。 作者&#xff1a;IT技术管理那些事儿 依然是Hadoop组件的讲解&#xff0c;今天说到HBase 架构&#xff0c;都…

Surface 系统恢复

Surface Pro 6超详细教程之下载Surface 系统恢复镜像并制作系统恢复U盘 https://www.jianshu.com/p/d1b41d913f91 怎样创建Windows 10系统恢复驱动器(U盘) https://jingyan.baidu.com/article/63f236286bd7c90208ab3dd7.html Surface Pro 6超详细教程之恢复Surface Pro6 window…

在Matlab2006a中如何创建.net组件

在Matlab2006a中如何创建.net组件 为了创建一个.NET组件&#xff0c;你必须首先写一个M-Code&#xff08;或者使用已存在的代码&#xff09;然后在MATLAB Builder for .NET中创建一个工程以打包这些代码. 1、编写、调试、保存Matlab代码以便作为.NET组件的基础 2、当你依然在Ma…

315. Count of Smaller Numbers After Self

文章目录1 题目理解2 暴力解法3 分治法1 题目理解 输入&#xff1a;int[] nums 输出&#xff1a;计数的数组int[] counts 规则&#xff1a;counts[i]表示nums中下标大于i&#xff0c;值小于nums[i]的个数 Example 1: Input: nums [5,2,6,1] Output: [2,1,1,0] Explanation: T…

SQL Server执行计划那些事儿(3)——书签查找

接下来的文章是记录自己曾经的盲点&#xff0c;同时也透漏了自己的发展历程&#xff08;可能发展也算不上&#xff0c;只能说是瞎混&#xff09;。当然&#xff0c;一些盲点也在工作和探究过程中慢慢有些眉目&#xff0c;现在也愿意发扬博客园的奉献精神&#xff0c;拿出来和大…

博客堂怎么连个搜索功能都没有

今天想去博客堂搜索下文章看看&#xff0c;结果找了半天&#xff0c;差点把显示器翻过来看也没找到个搜索的功能。是我真的没找到&#xff0c;还是博客堂觉的搜索功能没必要啊??? 转载于:https://www.cnblogs.com/BearsTaR/archive/2006/06/07/419837.html

1218. 最长定差子序列

文章目录1 题目理解2 开始思考1 题目理解 给你一个整数数组 arr 和一个整数 difference&#xff0c;请你找出并返回 arr 中最长等差子序列的长度&#xff0c;该子序列中相邻元素之间的差等于 difference 。 输入&#xff1a;整数数组arr&#xff0c; 整数difference 输出&…

第一百零九期:双十一光棍节调试一个商城必备功能,Java Springboot开源秒杀系统

秒杀系统在电商系统中是非常重要的&#xff0c;不是因为秒杀这个功能重要&#xff0c;而是因为秒杀提现的是一个系统的并发负载能力。例如阿里巴巴或者京东&#xff0c;每年的双十一的峰值&#xff0c;其实就是下一年的常态&#xff0c;双十一各项技术指标&#xff0c;已经作为…

【名额有限】云开发AI拓展能力等你来体验!

这次来了个超厉害的新能力&#xff01; 人脸智能打马赛克、人脸智能裁剪……各种操作&#xff0c;都能一步到位! 迫不及待想体验&#xff0c;戳链接&#xff1a;https://wj.qq.com/s2/3986990/e0ef/ 还没有搞懂&#xff0c;继续往下看—— 基于云开发&#xff0b;AI人脸检测与分…

第一百一十期:详解SpringBoot应用跨域访问解决方案

说到跨域访问&#xff0c;必须先解释一个名词&#xff1a;同源策略。所谓同源策略就是在浏览器端出于安全考量&#xff0c;向服务端发起请求必须满足&#xff1a;协议相同、Host(ip)相同、端口相同的条件&#xff0c;否则访问将被禁止&#xff0c;该访问也就被称为跨域访问。 …

【REPERTOIRE】Rastaman Vibration

上周四的晚上跟项目里的同事一起去吃饭&#xff0c;去的是城外面一个叫Aussonne小镇上的Restaurant du Lac&#xff0c;左近真的有个湖。 当晚又充分体现了法国人吃晚饭的功夫&#xff0c;我们到凌晨一点才回城&#xff0c;接下来的几天昏昏沉沉&#xff0c;用了周末才恢复&…

63. Unique Paths II and 64. Minimum Path Sum

文章目录1 63 Unique Paths II1.1 题目描述1.2 动态规划解决2 64. Minimum Path Sum2.1 题目理解2.2 动态规划这一遍刷dp的题目就很轻松了。1 63 Unique Paths II 1.1 题目描述 A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram…

LCA模板(数剖实现)

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P3379 题意&#xff1a;LCA模板题。 思路&#xff1a;今天开始学树剖&#xff0c;先拿lca练练。树剖解lca&#xff0c;两次dfs复杂度均为O(n)&#xff0c;每次查询为logn&#xff0c;因此总复杂度为&#xff1a;O(2…

spring mvc学习(23):eclipse创建Maven项目没有src/main/java并不能新建的问题

eclipse里第一次创建Maven项目时&#xff0c;src/main/java与src/test/java目录都不会出现&#xff0c;这是因为eclipse里的一个默认配置。这两个目录是真实存在的&#xff0c;只是隐藏了。 这时候想要让这两个目录出现&#xff0c;就需要修改以下配置&#xff1a; 右击项目-…

Servlet技术简介与编写、编译Servlet程序

1&#xff0e;Servlet技术简介Servlet技术是Sun公司提供的一种实现动态网页的解决方案&#xff0c;它是基于Java编程语言的WEB服务器端编程技术&#xff0c;主要用于在WEB服务器端获得客户端的访问请求信息和动态生成对客户端的响应消息。Servlet技术也是JSP技术&#xff08;另…

spring mvc学习(24):配置maven环境和创建maven项目(建议收藏,超全超详细)

1本次歌谣就对如何创建一个maven项目做一个详细的讲解&#xff0c;毕竟卡了我三天&#xff0c;久久不能入眠&#xff0c;也搜了网上很多的博客 都没有顺利的解决maven项目的创建。这篇建议大家收藏&#xff0c;总会用到的。不然大家看网上的博客也是一脸懵逼。 2首先工具使用…

120. Triangle

文章目录1 题目理解2 解题2.1 动态规划2.2 优化空间2.3进一步优化空间1 题目理解 Given a triangle array, return the minimum path sum from top to bottom. For each step, you may move to an adjacent number on the row below. 输入&#xff1a;一个三角形数组List<…

Torque2D MIT 实战记录: 塔防进度(1)

前言 Torque2D虽然工具不齐全,而且加入MIT不久,但是有老底在,所以即使是第一版也是非常好用和完善的,这几天准备开发一款塔防类的游戏. :) 熟悉了TorqueScript的用法后,写东西还是很快的. 进度 1. 完成了道具库模块 2. 场景系统 3. 阵营逻辑 4. 攻击系统雏形 截图 效果还不错吧…

三十岁前不要去在乎的18件事

1&#xff0e;放弃 把握的反面就是放弃&#xff0c;选择了一个机会&#xff0c;就等于放弃了其它所有的可能。当新的机会摆在面前的时候&#xff0c;敢于放弃已经获得的一切&#xff0c;这不是功亏一篑&#xff0c;这不是半途而废&#xff0c;这是为了谋求更大的发展空间&#…