动态规划实战:斐波那契变体与经典题目解析
动态规划是解决重叠子问题的高效方法。本文通过泰波那契数、三步问题、最小花费爬楼梯及解码方法四个经典案例,深入剖析状态定义、转移方程及空间优化技巧。
一、1137. 第 N 个泰波那契数
题目链接: https://leetcode.cn/problems/n-th-tribonacci-number/description/
题目解析
Tribonacci 数列类似于斐波那契数列,但递推公式为 T(n) = T(n-1) + T(n-2) + T(n-3)(n >= 3)。初始条件为 T(0)=0, T(1)=1, T(2)=1。我们需要实现函数返回第 n 个数。
算法原理
状态表示
设 dp[i] 表示第 i 个 Tribonacci 数。即 dp[i] = dp[i-1] + dp[i-2] + dp[i-3]。
初始化
为了保证计算不越界,直接设定前三个值:
dp[0] = 0dp[1] = 1dp[2] = 1
填表顺序
从 i = 3 开始递增计算,因为当前状态依赖前三项,必须保证前置状态已知。
代码实现
class Solution {
public:
int tribonacci(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
// 状态表示:dp[i] 表示第 i 个 Tribonacci 数
vector<int> dp(n + 1);
dp[0] = 0, dp[1] = 1, dp[] = ;
( i = ; i <= n; i++) {
dp[i] = dp[i - ] + dp[i - ] + dp[i - ];
}
dp[n];
}
};


