1137. 第 N 个泰波那契数 - 力扣(LeetCode)
1 题干部分

2 拆解
1 状态表示:dp[i]
2 状态转移方程:dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
3 初始化:让dp[0]=0,dp[1]=dp[2]=1
4 填表顺序:从dp[3]开始填从左往右填
5 返回值:dp[n]即为返回的数列Tn
3 思路及代码实现
cpp
class Solution {
public:
public:
int tribonacci(int n) {
if(n==0) return 0;
if(n==1||n==2) return 1;
//建表
vector<int> dp(n+1);
//初始化
dp[0]=0, dp[1]=dp[2]=1;
//填表
for(int i=3;i<n+1;i++)
dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
//返回
return dp[n];
}
};
4 空间优化
思路:
利用滚动数组来节省dp表的空间开销
创建四个变量,让其位于后面的三个数据向前不断滚动
代码实现:
cpp
class solution{
public:
int tribonacci(int n) {
if(n==0) return 0;
if(n==1||n==2) return 1;
in
int a=0,b=1,c=1,d=0;
for(int i=3;i<n+1;i++)
{
d=a+b+c;
a=b,b=c,c=d;
}
return d;
};