第 N 个泰波那契数
题目
泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n
,请返回第 n
个泰波那契数 Tn
的值。
示例 1:
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
示例 2:
输入:n = 25
输出:1389537
提示:
- 0 <= n <= 37
- 答案保证是一个
32
位整数,即answer <= 2^31 - 1
。
题解
解题思路
由题目可知,Tn+3 = Tn + Tn+1 + Tn+2
,我们可以直接使用 递归
的思想,将公式代入即可。但是根据题目的要求,最大值为 2^31 - 1
。如果直接这么做的话,循环会超出时间限制。
我们不妨来列举一下:
T3 = T0 + T1 + T2
T4 = T1 + T2 + T3
T5 = T2 + T3 + T4
- ...... 不难发现的是,每次相加,总有两项的和在上一次的求和过程中是计算过的,不用重复计算,因此我们可以把公式稍稍做一下转换:
T4 = T3 - T0 + T3
T5 = T4 - T1 + T4
- ......
Tn = 2 * T(n-1) - T(n-4)
这样就可以避免重复计算,随着数字的增大,减少了很多次无畏的循环,提高了性能。唯一需要注意的是,当计算T(-1)
时,需要返回0。
/**
* 第 N 个泰波那契数
* @param {number} n
* @return {number}
*/
export const tribonacci = function(n: number): number {
if (n < 0) return 0
if (n < 2) return n
if (n === 2) return 1
return 2 * tribonacci(n - 1) - tribonacci(n - 4)
}