日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

842. Split Array into Fibonacci Sequence

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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]<=231?1,也就是正整數
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?(n?1)),也就是O(n2)O(n^2)O(n2)
所以最終,最壞時間復雜度O(n3)O(n^3)O(n3)

總結

以上是生活随笔為你收集整理的842. Split Array into Fibonacci Sequence的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。