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

给定一个数字字符串 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]

解题思路

穷举前两个数字,前两个数字确定了,斐波那契数列也就确定了,只需要检查后面的字符串是不是满足斐波那契数列即可。

代码

class Solution {List<Integer> tarr=new ArrayList<>();public List<Integer> splitIntoFibonacci(String S) {for(int i=1;i<= Math.ceil((double)S.length()/3);i++)//穷举第一个数字{int sec=i;if(S.charAt(0)=='0'&&i>1) break;//0开头的排除long c=Long.parseLong(S.substring(0,i));if(c>Integer.MAX_VALUE) break;//大于int最大值的排除tarr.add(Integer.parseInt(S.substring(0,i)));for(int j=sec+1;j<=Math.ceil((double)(S.length()*2)/3);j++)//穷举第二个数字{if(S.charAt(sec)=='0'&&j>sec+1) break;long temp=Long.parseLong(S.substring(sec,j));if(temp>Integer.MAX_VALUE) break;tarr.add(Integer.parseInt(S.substring(sec,j)));if(getFibonacci(S,j)) return tarr;//检查后面的字符串tarr.remove(tarr.size()-1);//回溯}tarr.remove(tarr.size()-1);}tarr.clear();return tarr;}public boolean getFibonacci(String S,int s) {String tar=String.valueOf(tarr.get(tarr.size()-1)+tarr.get(tarr.size()-2));//要寻找的目标元素if(s==S.length()&&tarr.size()>2) return true;else if(s+tar.length()>S.length()) return false;//递归边界if(S.substring(s,s+tar.length()).equals(tar)) {tarr.add(Integer.parseInt(tar));if(!getFibonacci(S,s+tar.length())) {tarr.remove(tarr.size()-1);//回溯return false;}else return true;}else return false;}
}

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

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

相关文章

博主简介

面向各层次&#xff08;从中学到博士&#xff09;提供GIS和Python GIS案例实验实习培训&#xff0c;以解决问题为导向&#xff0c;以项目实战为主线&#xff0c;以科学研究为思维&#xff0c;不讲概念&#xff0c;不局限理论&#xff0c;简单照做&#xff0c;即学即会。 研究背…

自定义Toast 很简单就可以达到一些对话框的效果 使用起来很方便

自定义一个layout布局 通过toast.setView 设置布局弹出一些警示框 等一些不会改变的提示框 很方便public class CustomToast {public static void showUSBToast(Context context) {//加载Toast布局 View toastRoot LayoutInflater.from(context).inflate(R.layout.toas…

微信小程序阻止冒泡点击_微信小程序bindtap事件与冒泡阻止详解

bindtap就是点击事件在.wxml文件绑定:cilck here在一个组件的属性上添加bindtap并赋予一个值(一个函数名)当点击该组件时, 会触发相应的函数执行在后台.js文件中定义tapMessage函数://index.jsPage({data: {mo: Hello World!!,userid : 1234,},// 定义函数tapMessage: function…

同情机器人_同情心如何帮助您建立更好的工作文化

同情机器人Empathy is one of those things that can help in any part of life whether it’s your family, friends, that special person and even also at work. Understanding what empathy is and how it effects people took me long time. I struggle with human inter…

数据库课程设计结论_结论

数据库课程设计结论When writing about learning or breaking into data science, I always advise building projects.在撰写有关学习或涉足数据科学的文章时&#xff0c;我总是建议构建项目。 It is the best way to learn as well as showcase your skills.这是学习和展示技…

mongo基本使用方法

mongo与关系型数据库的概念对比&#xff0c;区分大小写&#xff0c;_id为主键。 1.数据库操作 >show dbs #查看所有数据库 >use dbname #创建和切换数据库&#xff08;如果dbname存在则切换到该数据库&#xff0c;不存在则创建并切换到该数据库&#xff1b;新创建的…

leetcode 62. 不同路径(dp)

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 问总共有多少条不同的路径&#xff1f; 例如&…

第一名数据科学工作冠状病毒医生

背景 (Background) 3 years ago, I had just finished medical school and started working full-time as a doctor in the UK’s National Health Service (NHS). Now, I work full-time as a data scientist at dunnhumby, writing code for “Big Data” analytics with Pyt…

mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...

关于日期函数TO_TIMESTAMP拓展&#xff1a;date类型是Oracle常用的日期型变量&#xff0c;时间间隔是秒。两个日期型相减得到是两个时间的间隔&#xff0c;注意单位是“天”。timestamp是DATE类型的扩展&#xff0c;可以精确到小数秒(fractional_seconds_precision)&#xff0c…

ajax 赋值return

ajax 获得结果后赋值无法成功&#xff0c; function grades(num){ var name"";   $.ajax({    type:"get",     url:"",     async:true,     success:function(result){     var grades result.grades;     …

JavaScript(ES6)传播算子和rest参数简介

by Joanna Gaudyn乔安娜高登(Joanna Gaudyn) JavaScript(ES6)传播算子和rest参数简介 (An intro to the spread operator and rest parameter in JavaScript (ES6)) 扩展运算符和rest参数都被写为三个连续的点(…)。 他们还有其他共同点吗&#xff1f; (Both the spread opera…

python爬虫消费者与生产者_Condition版生产者与消费者模式

概述&#xff1a;在人工智能来临的今天&#xff0c;数据显得格外重要。在互联网的浩瀚大海洋中&#xff0c;隐藏着无穷的数据和信息。因此学习网络爬虫是在今天立足的一项必备技能。本路线专门针对想要从事Python网络爬虫的同学而准备的&#xff0c;并且是严格按照企业的标准定…

【Python包】安装teradatasql提示找不到pycryptodome模块错误(pycrypto,pycryptodome和crypto加密库)...

1.问题描述 安装teradatasql时&#xff0c;出现错误Could not find a version that satisfies the requirement pycryptodome&#xff0c;具体如下&#xff1a; 2.解决方法 查看Python第三方库目录$PYTHON_HOME/lib/python3.6/site-packages目录下没有pycryptodome目录&#xf…

leetcode 860. 柠檬水找零(贪心算法)

在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零&#xff0…

简述yolo1-yolo3_使用YOLO框架进行对象检测的综合指南-第二部分

简述yolo1-yolo3In the last part, we understood what YOLO is and how it works. In this section, let us understand how to apply it using pre-trained weights and obtaining the results. This article is greatly inspired by Andrew Ng’s Deep Learning Specializat…

ubuntu配置JDK环境

>>>cd /usr/lib >>>mkdir java >>>cd java ###这里的参数表示接收他们的协议 >>>wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/…

java cxf 调用wcf接口_JAVA 调用 WCF 服务流程

1. 将 WCF 服务发布到 Windows 服务(或者 IIS)此步骤的目的是为 WCF 服务搭建服务器&#xff0c;从而使服务相关的 Web Services 可以被 JAVA 客户端程序调用&#xff0c;具体步骤参考如下&#xff1a;(1) 发布到 Windows 服务(2) 发布到 IIS注&#xff1a;如果是将 WCF 服务…

react第三方组件库_如何自定义您的第三方React组件

react第三方组件库by Jacob Goh雅各布高 如何自定义您的第三方React组件 (How to customize your third party React components) Component libraries make our lives easier.组件库使我们的生活更轻松。 But as developers, you might often find yourselves in situations…

gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境

gcp devopsBy: Edward Krueger and Douglas Franklin.作者&#xff1a; 爱德华克鲁格 ( Edward Krueger)和道格拉斯富兰克林 ( Douglas Franklin) 。 In this article, we will cover how to set up a cloud computing instance to run Python with or without Jupyter Notebo…

迅为工业级iMX6Q开发板全新升级兼容PLUS版本|四核商业级|工业级|双核商业级...

软硬件全面升级 1. 新增Yocto项目的支持 增加opencv等软件功能 2. 新近推出i.MX6增强版本核心板&#xff08;PLUS&#xff09; -性能更强 四种核心板全兼容 四核商业级2G/16G&#xff1b;双核商业级1G/8G &#xff1b;四核工业级1G/8G &#xff1b;四核增强版(PLUS) 3. 豪华配…