第 N 个泰波那契数
难度:
标签:
题目描述
代码结果
运行时间: 18 ms, 内存: 16.0 MB
/*
* Problem: 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 an integer n, return the nth Tribonacci number Tn.
*
* Example 1:
* Input: n = 4
* Output: 4
* Explanation:
* T3 = 0 + 1 + 1 = 2
* T4 = 1 + 1 + 2 = 4
*
* Example 2:
* Input: n = 25
* Output: 1389537
*
* Constraints:
* 0 <= n <= 37
* The answer is guaranteed to be a 32-bit integer, i.e., answer <= 2^31 - 1.
*/
import java.util.stream.IntStream;
public class TribonacciStream {
public int tribonacci(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
int[] trib = {0, 1, 1};
IntStream.range(3, n + 1).forEach(i -> {
int next = trib[0] + trib[1] + trib[2];
trib[0] = trib[1];
trib[1] = trib[2];
trib[2] = next;
});
return trib[2];
}
public static void main(String[] args) {
TribonacciStream tribonacci = new TribonacciStream();
System.out.println(tribonacci.tribonacci(4)); // Output: 4
System.out.println(tribonacci.tribonacci(25)); // Output: 1389537
}
}
解释
方法:
此题解采用迭代方法计算泰波那契数。首先初始化前三个泰波那契数 T0 = 0, T1 = 1, T2 = 1。针对 n 分别小于等于 0, 1, 2 的情况直接返回对应的泰波那契数值。对于 n 大于 2 的情况,使用一个 for 循环从 3 迭代到 n。在每次迭代中,计算当前泰波那契数为前三个数的和,然后更新这三个数,即使得 T0 = T1, T1 = T2, T2 = 新计算的和。最终,循环结束后返回 T2,即第 n 个泰波那契数。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么在初始化时选择直接返回n=0, n=1, 和 n=2的情况,而不将它们包含在迭代循环中处理?
▷🦆
在迭代过程中,每次更新T0, T1, T2的值,这种更新方式是否会影响计算的准确性或执行效率?
▷🦆
迭代方法与递归方法相比,在解决这个问题时有哪些优势和劣势?
▷🦆
给定题目中的n的最大值为37,这是否意味着在实际情况下,迭代方法的性能表现通常满足需求?
▷