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

目录

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

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


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

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

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

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

所以在这道题里面它的状态转移方程就是dp[i]=min(dp[i-1],dp[i-2])+c[i]。

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

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

返回值就是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的话,那么就先dp[i]+=dp[i-1],然后如果可以和前面一个数字组成大于9并且小于27的数的话,那么dp[i]再+=dp[i-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];
    }
};
相关推荐
仰泳的熊猫5 分钟前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码3 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发4 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre4 小时前
22 括号生成
算法·深度优先
努力也学不会java5 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎6 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan6 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
金融小师妹6 小时前
基于多模态宏观建模与历史序列对齐:原油能源供给冲击的“类1970年代”演化路径与全球应对机制再评估
大数据·人工智能·能源
播播资源6 小时前
OpenAI2026 年 3 月 18 日最新 gpt-5.4-nano模型:AI 智能体的“神经末梢”,以极低成本驱动高频任务
大数据·人工智能·gpt