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

目录

[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];
    }
};
相关推荐
Dxy123931021626 分钟前
别再让 ES 把你拖垮!5 个实战技巧让搜索性能提升 10 倍
大数据·elasticsearch·搜索引擎
啊森要自信33 分钟前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
仟濹1 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
2501_943695331 小时前
大专市场调查与统计分析专业,怎么辨别企业招聘的“画饼”岗位?
大数据
驭渊的小故事1 小时前
简单模板笔记
数据结构·笔记·算法
七夜zippoe1 小时前
CANN Runtime跨进程通信 共享设备上下文的IPC实现
大数据·cann
威胁猎人1 小时前
【黑产大数据】2025年全球电商业务欺诈风险研究报告
大数据
YuTaoShao1 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
VT.馒头1 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
goodluckyaa1 小时前
LCR 006. 两数之和 II - 输入有序数组
算法