【学会动态规划】解码方法(4)

这篇具有很好参考价值的文章主要介绍了【学会动态规划】解码方法(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

【学会动态规划】解码方法(4),学会动态规划,动态规划,算法

这道题目不难理解,就是根据题目给的字符串的数字,

然后解码成字母有多少种情况,然后注意有前导零的数字不能解码。 

2. 算法原理

1. 状态表示

这道题目的状态表示其实就是,

dp[ i ] 位置代表什么,而 dp[ i ] 位置代表的是到第 i 个位置的时候解码方法的总数是多少?

2. 状态转移方程

状态表达式的求解方法就是根据最近的一步划分问题,

我们来分析一下,dp[ i ] 有两种解码方法,

1. s[ i ] 单独解码,如果是单独解码,当 s[ i ] 的值是 1~9 的时候可以自己解码,

自己解码的方案数就是 dp[ i - 1 ],如果 s[ i ] 的值是 0,那方案数就是0,整体解码失败,

2. s[ i ] 和 s[ i - 1 ] 一起解码,当 s[ i  - 1 ] * 10 + s[ i ] 的值是 10~26 的时候就可以解码,

而解码数就是 dp[ i - 2 ],如果解码失败,不在这个区间内,那方案数就也是0。

所以我们可以得出转态转移方程大体是:

dp[ i ] = dp[ i - 1 ] + dp[ i - 2 ] (根据上面的方案数判断规则)

3. 初始化

初始化就是防止填表的时候越界,

而我们的状态转移方程需要用到 dp[ i - 1 ] 和 dp[ i - 2 ],

所以我们要初始化 dp[ 0 ] 和 dp[ 1 ] 位置,

dp[ 0 ] 位置,如果s[ 0 ] 解码成功就是1,不成功就是0

dp[ 1 ] 位置,如果 dp[ 1 ] 能自己解码,就 + 1,如果能跟 dp[ 0 ] 一起解码,就再 + 1,

如果dp[ 1 ] 两种情况都不能解码,就是0。(所以可能是0,  1,  2)  

4. 填表顺序

填表顺序还是从左往右。

5. 返回值

返回值就是字符串最后一个位置的方案数,dp[ s.size() - 1 ]。

3. 代码编写

class Solution {
public:
    int numDecodings(string s) {
        // 创建dp表
        int size = s.size();
        vector<int> dp(size);

        // 初始化
        dp[0] = s[0] != '0';
        if(size == 1) return dp[0];

        if(s[0] != '0' && s[1] != '0') dp[1]++;
        int tmp = (s[0] - '0') * 10 + (s[1] - '0');
        if(tmp >= 10 && tmp <= 26) dp[1]++;

        for(int i = 2; i < size; i++) {
            if(s[i] != '0') dp[i] += dp[i - 1]; // 单独解码
            tmp = (s[i - 1] - '0') * 10 + (s[i] - '0');
            if(tmp >= 10 && tmp <= 26) dp[i] += dp[i - 2]; // 和前面联合解码
        }
        return dp[size - 1];
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-579616.html

到了这里,关于【学会动态规划】解码方法(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 60题学会动态规划系列:动态规划算法第三讲

    60题学会动态规划系列:动态规划算法第三讲

    简单多状态问题 文章目录 一.按摩师 二.打家劫舍系列 三.删除并获得点数 四.粉刷房子 力扣链接:力扣 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,

    2024年02月08日
    浏览(9)
  • 60题学会动态规划系列:动态规划算法第四讲

    60题学会动态规划系列:动态规划算法第四讲

    买卖股票相关的动态规划题目 文章目录 1. 买卖股票的最佳时机含冷冻期 2. 买卖股票的最佳时期含⼿续费 3. 买卖股票的最佳时机III 4. 买卖股票的最佳时机IV 力扣链接:力扣 给定一个整数数组 prices ,其中第    prices[i]  表示第  i  天的股票价格 。​ 设计一个算法计算出最

    2024年02月13日
    浏览(8)
  • 60题学会动态规划系列:动态规划算法第二讲

    60题学会动态规划系列:动态规划算法第二讲

    都是路径问题~ 文章目录 1.不同路径 2.不同路径II 3.礼物的最大价值 4.下降路径最小和 5.最小路径和 力扣链接:力扣 一个机器人位于一个  m x n   网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在

    2024年02月07日
    浏览(10)
  • 60题学会动态规划系列:动态规划算法第一讲

    60题学会动态规划系列:动态规划算法第一讲

    坚持就是胜利 - -  文章目录 1.第N个泰波那切数 2.三步问题 3.使用最小花费爬楼梯 4.解码方法 力扣链接:力扣 泰波那契序列 Tn 定义如下:  T0 = 0, T1 = 1, T2 = 1, 且在 n = 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给你整数  n ,请返回第 n 个泰波那契数 Tn 的值。  首先我们分析一下

    2024年02月06日
    浏览(9)
  • 60题学会动态规划系列:动态规划算法第五讲

    60题学会动态规划系列:动态规划算法第五讲

    子数组系列题目 文章目录 1.最大子数组和 2.环形子数组的最大和 3.乘积最大数组 4.乘积为正数的最长子数组长度 5.等差数列划分 6.最长湍流子数组 7.单词拆分 8.环绕字符串中唯一的子字符串 力扣链接:力扣 给你一个整数数组  nums  ,请你找出一个具有最大和的连续子数组(

    2024年02月15日
    浏览(12)
  • 【动态规划】:泰波那契模型_解码方法

    【动态规划】:泰波那契模型_解码方法

    朋友们、伙计们,我们又见面了,本专栏是关于各种算法的解析,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结构专栏:数据结构 个  人  主  页 :stackY、 C + + 专 栏   :C++ Linux 专 栏  :Linux 目录

    2024年02月19日
    浏览(10)
  • 基于采样的规划算法之动态规划方法

    基于采样的规划算法之动态规划方法

    经过前面对RRT的介绍,我们发现基于采样的规划算法与基于图搜索的规划算法都是通过对路径树进行拓展新节点,来找到起点到终点的路径解。RRT家族通过随机采样来生成这棵路径树,随机采样会面临采样低效的问题——大部分采样的新节点都无益于提升路径解的最优性。动

    2024年02月11日
    浏览(7)
  • 【学会动态规划】单词拆分(24)

    【学会动态规划】单词拆分(24)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:139. 单词拆分 - 力扣(LeetCo

    2024年02月12日
    浏览(10)
  • 【学会动态规划】摆动序列(27)

    【学会动态规划】摆动序列(27)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:376. 摆动序列 - 力扣(LeetCo

    2024年02月11日
    浏览(6)
  • 【学会动态规划】不同路径(5)

    【学会动态规划】不同路径(5)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:62. 不同路径 - 力扣(Leetcod

    2024年02月16日
    浏览(5)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包