练习一 : 第 n 个泰波那契数
1137. 第 N 个泰波那契数 - 力扣(LeetCode)
java
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];
}
}
练习二 : 三步问题
面试题 08.01. 三步问题 - 力扣(LeetCode)
java
class Solution {
public int waysToStep(int n) {
// 边界条件
if (n == 0 || n == 1) return 1;
if (n == 2) return 2;
// 用long避免整数溢出,无需硬编码特殊值
long[] dp = new long[n + 1];
dp[0] = dp[1] = 1;
dp[2] = 2;
int mod = 1000000007;
for (int i = 3; i <= n; i++) {
// 分步取模,确保每一步都不溢出
dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % mod;
}
// 最终转int返回
return (int) dp[n];
}
}
练习三 : 使用最小花费爬楼梯
java
class Solution {
public int minCostClimbingStairs(int[] cost) {
int n = cost.length;
int[] dp = new int[n+1];
dp[0] = 0;
dp[1] = 0;
for(int i = 2;i<=n;i++){
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[n];
}
}
状态表示 : dp[i] = 到达第 i 级台阶所需要的最小花费
状态转移方程 : dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])