前往
大廳
主題

LeetCode - 0842. Split Array into Fibonacci Sequence 解題心得

Not In My Back Yard | 2024-05-16 12:00:08 | 巴幣 100 | 人氣 23

題目連結:


題目意譯:
你被給定一個數字字串 num,例如說 "123456579"。而這個例子中我們可以將該字串分切成一個如費氏數列般(Fibonacci-Like)的序列 [123, 456, 579]。

更正式地說,一個如費氏數列般的序列為一個非負整數列表 f,使得:
    0 ≦ f[i] < 2 ^ 31(即每個整數可以容納進一個 32 位元有號整數內)、
    f.length ≧ 3,且
    f[i] + f[i + 1] == f[i + 2] 對於所有 i 值滿足 0 ≦ i < f.length - 2。

注意到當在分切的時候,每一個部份都不得有前導零,除了數字 0 自身以外。

回傳從 num 可以分切得到的任意一個如費氏數列般的序列。如果做不到,則回傳 []。

限制:
1 ≦ num.length ≦ 200
num 只包含數字。



範例測資:
範例 1:
輸入: num = "1101111"
輸出: [11,0,11,11]
解釋: [110, 1, 111] 之輸出也同樣會被接受。

範例 2:
輸入: num = "112358130"
輸出: []
解釋: 做不到。

範例 3:
輸入: num = "0123"
輸出: []
解釋: 前導零是不被允許的,所以 "01" 、 "2" 、 "3" 的切法是不合法的。


解題思維:
可以看到一旦決定出 f[0] 和 f[1] 之值之後,只要依序地算出 f[2] 、 f[3] 、…… 直到 f 中的數字串接起來的長度 ≧ num.length(當然,記得要判斷數字不得超過 32 位元有號整數的上界,即 2147483647),然後判斷串接的內容是否與 num 符合即可知道現在算出來的序列 f 是否為答案。

因此我們可以直接窮舉出所有可能的 f[0] 和 f[1](注意除了數字 0 本身以外的數字不能有前導零),然後按照上面的方法推算即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作