leetcode做题笔记91. 解码方法

这篇具有很好参考价值的文章主要介绍了leetcode做题笔记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 位 的整数。

思路一:动态规划

int numDecodings(char * s){
    int n = strlen(s);
    int dp[n+1];
    memset(dp,0,sizeof(dp));
    dp[0] = 1;
    for(int i = 1;i<=n;i++){
        if(s[i-1]!='0') dp[i]+=dp[i-1];

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


    }
    return dp[n];
}

分析:

根据题意,可以写成状态方程dp[i]+=dp[i-1];和dp[i]+=dp[i-2];,当s[i-1]!='0'时即前一位不为零,前面的一位数可以构成一个编码,当前前那个不为零且前两个数小于等于26时前两位可以构成一个编码,再编写相应代码即可

总结:

本题考察动态规划的应用,将能够构成编码的两种情况考虑完全即可做出文章来源地址https://www.toymoban.com/news/detail-669445.html

到了这里,关于leetcode做题笔记91. 解码方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 力扣 -- 91.解码方法

    题目链接:91. 解码方法 - 力扣(LeetCode)  以下是用动态规划的思想解决这道题目,如果对动态规划五部曲的含义还不是很清楚的老铁可以看看本专栏的第一题动规(10条消息) 力扣 -- 746. 使用最小花费爬楼梯_KOBE 0824 BRYANT的博客-CSDN博客,这里有比较详细的解析动态规划五部曲

    2024年02月12日
    浏览(41)
  • 91. 解码方法

    递归法: 超时了 从字符串的后面向前计算,每一次递归都缩小子集 参考动态规划 : 从字符串的前面向后计算 感想: 这两种解法,刚好反映了,递归与动态规划的关系, 递归 n - n - 1- ... 0    - n - 2 ... 0 动态规划 0 -1-...n

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

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

    2024年02月19日
    浏览(51)
  • 【算法】动态规划1,最小花费爬楼梯,解码方法

    动态规划 , 英文名称 Dynamic Programming , 简称 DP , 不是具体的某种算法 , 是一种算法思想 ; 动态规划 , 没有具体的步骤 , 只有一个核心思想 ; 动态规划 的 核心思想 是 由大化小 , 大规模问题 使用 小规模问题 计算结果 解决 , 类似于 分治算法 ; 例题1 通过分析最近的一步来划分问

    2024年02月21日
    浏览(39)
  • 【动态规划】【C++算法】639 解码方法 II

    视频算法专题 动态规划汇总 字符串 滚动向量 一条包含字母 A-Z 的消息通过以下的方式进行了 编码 : ‘A’ - “1” ‘B’ - “2” … ‘Z’ - “26” 要 解码 一条已编码的消息,所有的数字都必须分组,然后按原来的编码方案反向映射回字母(可能存在多种方式)。例如,“

    2024年01月18日
    浏览(44)
  • 力扣每日一题91:解码方法

    一条包含字母  A-Z  的消息通过以下映射进行了  编码  : 要  解码  已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如, \\\"11106\\\"  可以映射为: \\\"AAJF\\\"  ,将消息分组为  (1 1 10 6) \\\"KJF\\\"  ,将消息分组为  (11 10 6) 注意,消息不能分

    2024年02月06日
    浏览(36)
  • 【算法题】动态规划中级阶段之跳跃游戏、最大子数组和、解码方法

    动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优化问题的方法。它是一种将复杂问题分解成重叠子问题的策略,通过维护每个子问题的最优解来推导出问题的最优解。 动态规划的主要思想是利用已求解的子问题的最优解来推导出更大问题的最优解,从而

    2024年02月11日
    浏览(48)
  • Acwing.91 最短Hamilton路径(动态规划)

    给定一张n个点的带权无向图,点从0~n-1标号,求起点0到终点n-1的最短Hamilton路径。Hamilton路径的定义是从0到n-1不重不漏地经过每个点恰好一次。 第—行输入整数n。 接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i.i])。对于任意的, y,z,数据保证a[x,x]=0,

    2024年02月15日
    浏览(42)
  • [做题]动态规划

    下面一系列的线性dp问题更依赖闫氏dp分析法的发挥。 这里记录几条经验: 当状态计算方程中,在遍历时出现了 f[i-1] 的字样,那么数组下标就要从1开始,来防止负数下标和越界。 状态表示,我们划分集合的原则为 “不重不漏”: 不重复,不遗漏 。 当状态属性 要求取 su

    2024年04月23日
    浏览(27)
  • 算法模板(4):动态规划(4) 做题积累(2)

    1. 1088. 旅行问题 John 打算驾驶一辆汽车周游一个环形公路。 公路上总共有 n 个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。 John 必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。 在一开始的时候,

    2024年02月12日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包