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.pswp.cn/news/392529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392529.shtml
英文地址,請注明出處:http://en.pswp.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. 豪華配…