[Java 算法] 动态规划(1)

练习一 : 第 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];
    }
}

练习三 : 使用最小花费爬楼梯

746. 使用最小花费爬楼梯 - 力扣(LeetCode)

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])

相关推荐
WolfGang0073211 小时前
代码随想录算法训练营 Day18 | 二叉树 part08
算法
hanlin033 小时前
刷题笔记:力扣第43、67题(字符串计算)
笔记·算法·leetcode
yang_B6213 小时前
最小二乘法 拟合平面
算法·平面·最小二乘法
放下华子我只抽RuiKe53 小时前
深度学习全景指南:硬核实战版
人工智能·深度学习·神经网络·算法·机器学习·自然语言处理·数据挖掘
吴秋霖3 小时前
【某音电商】protobuf聊天协议逆向
python·算法·protobuf
m0_587958954 小时前
C++中的命令模式变体
开发语言·c++·算法
似水এ᭄往昔4 小时前
【数据结构】--链表OJ
数据结构·算法·链表
2501_924952694 小时前
代码生成器优化策略
开发语言·c++·算法
MORE_774 小时前
leecode100-划分区间-贪心算法
算法·贪心算法