You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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;
}
};
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:
Example 2:
Constraints:
0 <= n <= 37
answer <= 2^31 - 1
.这道题让求一个三元的斐波那契数列,我们对斐波那契数列应该都不陌生,当前的数字为前两个数字之和。举个生动的例子,大学食堂里今天的汤是昨天的汤加上前天的汤,只不过这里还要加上大前天的汤,哈哈~ 本质上跟之前那道 Fibonacci Number 没有啥太大的区别,这里 OJ 已经抹杀了不用记忆数组的暴力递归的方法了,这里博主就直接上最优解了,并不需要整个数组来记录所有数字,其实跟当前数字相关的只有前面的三个数字,所以使用三个变量就行了。前三个数字确定了,直接初始化好,然后i从2遍历到n,先把 first 保存到另一个变量t中,然后 first 更新为 second,second 更新为 third,third 更新为新的 first,second 和 t 之和,最终返回 third 即可,参见代码如下:
Github 同步地址:
#1137
类似题目:
Climbing Stairs
Fibonacci Number
参考资料:
https://leetcode.com/problems/n-th-tribonacci-number/
https://leetcode.com/problems/n-th-tribonacci-number/discuss/345236/JavaC%2B%2BPython-Easy-and-Concise
LeetCode All in One 题目讲解汇总(持续更新中...)
The text was updated successfully, but these errors were encountered: