算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

目录

[1. LeetCode746. 使用最小花费爬楼梯](#1. LeetCode746. 使用最小花费爬楼梯)

[2. LeetCode91. 解码方法](#2. LeetCode91. 解码方法)


今天我们继续来聊一聊动态规划的斐波那契数列类型的题目

1. LeetCode746. 使用最小花费爬楼梯

这个题目的话也是比较简单的。就是要求我们计算在可以一次走一步或者两步的情况下,到达结尾时的最小消耗。

所以在这道题里面它的状态表示就是走到当前位置的值的最小消耗。

所以在这道题里面它的状态转移方程就是dpi=min(dpi-1,dpi-2)+ci

它的初始化就是第0个位子设置为c0,第一个位置设置为c1。(怎么设置是因为我们是不知道开始的那个位置的大小,而且因为我们的状态转移方程需要依靠前两个位置的值,所以我们在这里就直接初始化前两个)。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值和第sz-2个位置的值的最小值。

cpp 复制代码
class Solution {
public:
    int minCostClimbingStairs(vector<int>& c) {
        int sz=c.size();
        vector<int> dp(sz+1);
        dp[0]=c[0];
        dp[1]=c[1];
        for(int i=2;i<sz;++i)
        {
            dp[i]=min(dp[i-1],dp[i-2])+c[i];
        }
        return min(dp[sz-1],dp[sz-2]);
    }
};

2. LeetCode91. 解码方法

这道题的话就是说,现在给一个数组,然后不同的数字可以代表不同的字母,可以单个字母,也可以两个字母拼在一起,然后要求我们返回这个数组可以组成的不同的字母串的数量。

这道题的话不难,就是多了一些细节上的判断。

在这道题里面它的状态表示就是以当前位置为结尾的字母串数量的最大值。

在这道题里面它的状态转移方程就需要分条件来判断了,如果当前位置不为0的话,那么就先dpi+=dpi-1,然后如果可以和前面一个数字组成大于9并且小于27的数的话,那么dpi再+=dpi-2。(这边之所以需要判断两遍是因为当前位置为结尾和当前数加上前一个数一起作为结尾,所以需要计算两遍)

]它的初始化就是通过判断的方式来先初始化前面两个数。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值就好。(因为必须是所有数字全部用上)

cpp 复制代码
class Solution {
public:
    int numDecodings(string s) {
        int sz=s.size();
        vector<int> dp(sz);
        if(s[0]!='0')
            dp[0]=1;
        else
            return 0;
        
        if(sz==1)
            return 1;

        if(s[1]!='0') 
            dp[1]+=dp[0];
        if((s[0]-'0')*10+s[1]-'0'<27) 
            dp[1]++;

        for(int i=2;i<sz;++i)
        {
            if(s[i]!='0')
                dp[i]+=dp[i-1];

            if(((s[i-1]-'0')*10+s[i]-'0')<27&&((s[i-1]-'0')*10+s[i]-'0')>9)
                dp[i]+=dp[i-2];
        }
        return dp[sz-1];
    }
};
相关推荐
Leo.yuan26 分钟前
2026 年内网数据分析 Agent 选型:私有化部署、信创适配与安全合规的评估框架
大数据
AgentMaster26 分钟前
数据资产化落地难题:5款数据中台系统架构对比与实施记录
大数据·人工智能·算法
织码weavecodes36 分钟前
离线学习与多端进度同步:在线心跳、Redis 缓冲与断点续考技术实现
大数据·自动化
Logic10142 分钟前
C语言/数据结构动态规划题解:Kadane算法求最大子数组和——O(n)时间O(1)空间
c语言·数据结构·动态规划·贪心·时间复杂度·算法题·最大子数组和
IT毕设实战小研44 分钟前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计
鹿角片ljp1 小时前
从 Kimi Cyber Reasoning 学习网络安全推理数据集:从 Reasoning SFT 到安全 Agent 数据设计
数据结构·算法
智慧物业老杨1 小时前
人机协同的物业服务重构:技术落地路径与系统化思考
java·大数据·人工智能·重构·系统架构
圣保罗的大教堂1 小时前
leetcode 3629. 通过质数传送到达终点的最少跳跃次数 中等
leetcode
圣保罗的大教堂1 小时前
leetcode 1914. 循环轮转矩阵 中等
leetcode
汇智信科2 小时前
汇智信科-大型设备监控和故障诊断系统
大数据·汇智信科