2019年8月7日 星期三

[LeetCode] 1137.N-th Tribonacci Number 解題思路 (Easy)



久違解題時間,總覺得不練習會生疏阿!

於是從 LeetCode Easy 最後一題開始,沒有理由,只是因為忘記上次做到第幾題,但是我知道一定沒有做到最後一題,所以最後一題先。



LeetCode 題目連結


https://leetcode.com/problems/n-th-tribonacci-number/


題目


The Tribonacci sequence Tn is defined as follows: 
T0 = 0, T1 = 1, T2 = 1, and Tn+3 = Tn + Tn+1 + Tn+2 for n >= 0.
Given n, return the value of Tn.

Example 1:
Input: n = 4
Output: 4
Explanation:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
Example 2:
Input: n = 25
Output: 1389537

Constraints:
  • 0 <= n <= 37
  • The answer is guaranteed to fit within a 32-bit integer, ie. answer <= 2^31 - 1.


題目說明


T0 的時候是 0,T1 的時候是 1,T2 的時候是 1,然而 T3 以後則為 T3 以前的累加結果。
n 的上限是 37 ,則答案小於 2 的 31 次方減 1。

超時作法


第一直覺是認為這題用遞迴解,原本以為是為了考遞迴,後來跑一遍 Test 有到他要的結果,但沒想到超過時間了。總共跑了 八秒。

Kotlin
class Solution {
    fun tribonacci(n: Int): Int {
        if(n==0)
            return 0
        if(n == 1 || n == 2)
            return 1
        return tribonacci(n-2)+tribonacci(n-1)+tribonacci(n-3)
    }
}


 Accept 作法


後來選擇拿掉遞迴用迴圈去完成,終於通過了。時間複雜度為 O(n) 。

Kotlin
class Solution {
    fun tribonacci(n: Int): Int {
        
        var sum = 0
        var n1 = 0
        var n2 = 1
        var n3 = 1
        
        if(n == 0){
            return n1
        }
        
        if(n == 1 || n == 2)
            return n2
        
        for(i in 3..n){
            sum = n1 + n2 + n3
            n1 = n2
            n2 = n3
            n3 = sum
        }
        return sum
    }
}


更多 LeetCode 相關資源



複習程式面試書籍


除了 LeetCode 練習外,我也入手了這本,題庫來自真正的面試,並非摘自教科書。它們反映出頂尖公司真正會出的題目,你可以藉此做好充分準備

需要的話可以看看,寫得很仔細。



書名:提升程式設計師的面試力:189道面試題目與解答




相關 LeetCode文章一律會放在 程式解題 標籤分類,歡迎持續追蹤。


沒有留言:

張貼留言