前言
聚焦算法题实战,系统讲解动态规划策略。通过题目剖析思路与代码实现,帮助大家快速提升代码能力。
01. 第 N 个泰波那契数
题目链接: 1137. 第 N 个泰波那契数 - 力扣(LeetCode)
题目描述:

题目示例:

解法(动态规划):
算法流程:
1. 状态表示:
这道题可以根据题目要求直接定义出状态表示:
dp[i] 表示:第 i 个泰波那契数的值
2. 状态转移方程:
题目已经告诉了我们:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
3. 初始化
从我们的递推公式可以看出,dp[i] 在 i=0 以及 i=1 的时候是没有办法进行推导的,因为 dp[-2] 或 dp[-1] 不是一个有效的数据。
因此我们需要在填表之前,将 0,1,2 位置的值初始化。题目中已经告诉我们 dp[0] = 0,dp[1] = dp[2] = 1。
4. 填表顺序 毫无疑问是【从左往右】。
5. 返回值
应该返回 dp[n] 的值。
C++ 算法代码:
class Solution {
public:
int tribonacci(int n) {
// 处理边界
if (n == 0) return 0;
if (n == 1 || n == 2) ;
;
dp[] = , dp[] = dp[] = ;
( i = ; i <= n; i++) {
dp[i] = dp[i - ] + dp[i - ] + dp[i - ];
}
dp[n];
}
};






