久違解題時間,總覺得不練習會生疏阿!
於是從 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 練習外,我也入手了這本,題庫來自真正的面試,並非摘自教科書。它們反映出頂尖公司真正會出的題目,你可以藉此做好充分準備。
需要的話可以看看,寫得很仔細。
沒有留言:
張貼留言