题目描述
https://leetcode.cn/problems/n-th-tribonacci-number/
解法(动态规划)
dp算法流程
- 状态表⽰:
这道题可以「根据题⽬的要求」直接定义出状态表⽰:
dp[i] 表⽰:第i个泰波那契数的值。 - 状态转移⽅程:
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
滚动数组
降低空间复杂度
a = b, b = c, c = d向前滚动
代码
dp:
class Solution {
public:
int tribonacci(int n) {
if(n == 0) return 0;
if(n == 1 || n == 2) return 1;
int* dp = new int[n + 1];
dp[0] = 0; dp[1] = 1; dp[2] = 1;
for(int i = 3;i <= n; i++)
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
return dp[n];
}
};
滚动数组;
class Solution {
public:
int tribonacci(int n) {
if(n == 0) return 0;
if(n == 1 || n == 2) return 1;
int a = 0, b = 1, c = 1, d;
for(int i = 3;i <= n; i++){
d = a + b + c;
a = b, b = c, c = d;
}
return d;
}
};