【动态规划刷题 2】使⽤最⼩花费爬楼梯 && 解码⽅法

简介: 【动态规划刷题 2】使⽤最⼩花费爬楼梯 && 解码⽅法

使⽤最⼩花费爬楼梯

746 . 使用最小花费爬楼梯

链接: 746 . 使用最小花费爬楼梯


给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。


示例 1:

输入:cost = [10,15,20]

输出:15

解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]

输出:6

解释:你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。

1.状态表示

dp[i] 表示的是爬到第 i 阶楼梯时的最低花费。

2.状态转移方程

动态规划题,我们需要学会依靠经验和题目解析去猜测他们的状态转移方程。

爬到第i 阶位置,只有两种情况:

  1. 从 i-1 阶 爬一阶楼梯到 i;
  2. 从 i-2 阶 爬二阶楼梯到 i;

所以dp[i] 的值只需要 去其中的较小值即可,

dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

3. 初始化

从我们的递推公式可以看出, dp[i] 在 i = 0 以及 i = 1 的时候是没有办法进⾏推导的,因为dp[i-2] 或 dp[i-1] 不是⼀个有效的数据。

因此我们需要在填表之前,将0, 1的值初始化。题⽬中已经告诉我们

dp[0] = dp[1]=0

4. 填表顺序

按照数组下标的顺序,从左往右。

5. 返回值

应该返回 dp[n] 的值。

代码:

  int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        vector<int> dp(n+1);
        dp[0]=dp[1]=0;
        for(int i=2;i<=n;i++)
        {
            dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
        }
        return dp[n];
    }

解码方法

91 . 解码方法

一条包含字母 A-Z 的消息通过以下映射进行了 编码 :

‘A’ -> “1”

‘B’ -> “2”

…

‘Z’ -> “26”

要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:

“AAJF” ,将消息分组为 (1 1 10 6)

“KJF” ,将消息分组为 (11 10 6)

注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。

给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。

题目数据保证答案肯定是一个 32 位 的整数。


示例 1:

输入:s = “12”

输出:2

解释:它可以解码为 “AB”(1 2)或者 “L”(12)。


示例 2:

输入:s = “226”

输出:3

解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。


示例 3:

输入:s = “06”

输出:0

解释:“06” 无法映射到 “F” ,因为存在前导零(“6” 和 “06” 并不等价)。


1.状态表示


dp[i] 表示的是以第i位置为结尾时的解码方法数。


2.状态转移方程


动态规划题,我们需要学会依靠经验和题目解析去猜测他们的状态转移方程。

以 i-1 的位置进行分析,有两种情况:

  1. i位置是的数字在 1~9 之间,能单独表示一个字母
  2. i和i-1 位置的数字可以组成一个在 10 ~ 26 之间的一个字母

所以

i. 当 s[i] 上的数在 [1, 9] 区间上时: dp[i] += dp[i - 1] ;

ii. 当 s[i - 1] 与 s[i] 上的数结合后,在 [10, 26] 之间的时候: dp[i] +=dp[i - 2] ;

3. 初始化

从我们的递推公式可以看出, dp[i] 在 i = 0 以及 i = 1 的时候是没有办法进⾏推导的,因为dp[i-2] 或 dp[i-1] 不是⼀个有效的数据。

因此我们需要在填表之前,将0, 1的值初始化。

  1. 当s[0]不为‘0’ 时,dp[0]=1; 否则,dp[0]=0;
  2. 当s[1]!=‘0’ 时,dp[1]+=1; 当 s[0] 与 s[1] 上的数结合后,在 [10, 26] 之间的时,dp[1]+=1;

4. 填表顺序

按照数组下标的顺序,从左往右。

5. 返回值

应该返回 dp[n-1] 的值。

代码

    int numDecodings(string s) {
        //动态规划
        //创建dp[]数组
        //初始化
        //填表
        //返回值
        int n=s.size();
        vector<int> dp(n);
        //初始化
        if(s[0]=='0') return 0;
        dp[0]=1;
        if(n==1) return dp[0];
        if(s[1]!='0')  dp[1]+=1;
        int t= (s[0]-'0')*10+s[1]-'0';
        if(t>=10&&t<=26)
        {
            dp[1]+=1;
        }
        for(int i=2;i<n;i++)
        {
            if(s[i]!='0') dp[i]+=dp[i-1];
            int t= (s[i-1]-'0')*10+s[i]-'0';
            if(t>=10&&t<=26)
            {
                dp[i]+=dp[i-2];
            }
    }
    return dp[n-1];
}

相关文章
|
Java 项目管理 开发工具
《Git 简易速速上手小册》第7章:处理大型项目(2024 最新版)
《Git 简易速速上手小册》第7章:处理大型项目(2024 最新版)
463 2
|
SQL 数据采集 运维
从数据到价值,DataOps精益数据运营概述
DevOps大家可能比较熟悉,但对于概念相近的DataOps大家可能还不清楚。简单来说,如果DevOps是更快交付软件的一种理念,那DataOps就是"更快交付高质量数据"的一种理念。 我们星轨工具团队过去围绕数据链路,沉淀了很多工具和组件,提升了我们数据域项目交付的效率和质量,这和DataOps提倡的聚焦数据链路,从全局提效很匹配。因此我们结合DataOps理念做了一些探索和实践,本文会详细给大家介绍下DataOps理念。
3501 2
从数据到价值,DataOps精益数据运营概述
|
10月前
|
监控 数据可视化 安全
智慧工地云平台系统源码,基于PC管理+移动端+数据大屏端全方位智能化管理
企业级智慧工地平台聚焦人、机、料、法、环、测六要素,融合BIM与大数据分析,实现项目全要素数字化、网络化、智慧化管理。通过PC端、移动端、大屏端协同,覆盖实名制、安全、环境、设备等多场景,助力企业高效管控、政府精准监管,推动建筑工地智能升级。
452 0
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理流程
自然语言处理流程
782 1
|
运维 容灾 安全
国网安徽电力与阿里云联合完成行业首个全场景容灾演练
在安徽合肥的一座不起眼的数据中心里,一场没有硝烟的“战役”悄然打响。这不是一次普通的系统升级,而是一场关乎全省电网稳定运行的关键演练——这是一场关于数据、系统、故障和时间的较量,将验证电力系统背后的数据中心在碰到故障时,是否能够做到“不停电、不掉线”。 这场演练的主角,是我们身边默默守护万家灯火的电力人——国网安徽电力以及背后的技术团队,大家的目标是在极端情况下保障电网云平台稳定运行,确保每一台服务器、每一套业务系统“永不宕机”。这次演练,不仅是加速构建新型电力系统、增强电网“灵活可靠”的一次探索,也是能源电力行业迈向智能化、数字化过程中的一次真实实践。
613 11
|
人工智能 监控 数据可视化
Quick BI × ZOLOZ:数据智能强化跨境交易风险实时管控
随着跨境交易日益频繁,风险管理成为企业国际化的主要挑战。阿里云瓴羊Quick BI联合蚂蚁数科旗下ZOLOZ,推出AI×BI风控分析解决方案,助力全球跨境交易实时管控。通过自由灵活的可视化分析、多Region合规部署及国际化操作体验,Quick BI帮助ZOLOZ实现数据分析标准化,大幅提升决策效率,降低80%成本,服务覆盖25个国家和地区超12亿用户。
467 0
|
监控 Unix Linux
|
边缘计算 运维 安全
服务化架构 (SBA) 在 5G 核心网中的关键作用
服务化架构 (SBA) 在 5G 核心网中的关键作用
1393 1
|
人工智能 BI
用ChatGPT做excel表格真香!只需动嘴提要求和复制粘贴
用ChatGPT做excel表格真香!只需动嘴提要求和复制粘贴
1039 0
|
安全 Python
Python 中的全局解释器锁(GIL)详解
【8月更文挑战第24天】
866 0

热门文章

最新文章