[LeetCode] 1137. N-th Tribonacci Number 第N个泰波那契数
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
.
这道题让求一个三元的斐波那契数列,我们对斐波那契数列应该都不陌生,当前的数字为前两个数字之和。举个生动的例子,大学食堂里今天的汤是昨天的汤加上前天的汤,只不过这里还要加上大前天的汤,哈哈~ 本质上跟之前那道 Fibonacci Number 没有啥太大的区别,这里 OJ 已经抹杀了不用记忆数组的暴力递归的方法了,这里博主就直接上最优解了,并不需要整个数组来记录所有数字,其实跟当前数字相关的只有前面的三个数字,所以使用三个变量就行了。前三个数字确定了,直接初始化好,然后i从2遍历到n,先把 first 保存到另一个变量t中,然后 first 更新为 second,second 更新为 third,third 更新为新的 first,second 和 t 之和,最终返回 third 即可,参见代码如下:
class Solution {
public:
int tribonacci(int n) {
if (n < 2) return n;
int first = 0, second = 1, third = 1;
for (int i = 2; i < n; ++i) {
int t = first;
first = second;
second = third;
third = t + first + second;
}
return third;
}
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/1137
类似题目:
参考资料:
https://leetcode.com/problems/n-th-tribonacci-number/