首页 > 其他分享 >91.解码方法

91.解码方法

时间:2023-03-12 15:36:07浏览次数:47  
标签:06 映射 示例 int 解码 91 return 方法

解码方法

一条包含字母 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 <= s.length <= 100
s 只包含数字,并且可能包含前导零。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/decode-ways
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

见注释。

code

class Solution {
public:

    //动态规划
    //状态表示:f[i]前i个字符的解码总数
    //状态转移:(i) + f[i-1] (i + i-1) + f[i-2]
    //特殊点:i = 0 i = 1

    bool decode(char & s1,char & s2)
    {
        if(s1 == '1' || (s1 == '2' && (s2 <= '6' && s2 >= '0')))
        {
            
            return true;
        }
        return false;
    }
    int numDecodings(string s) {
        
        int n = s.size();
        
        vector<int> f(n + 1,0);

        if(s[0] == '0') return 0;

        f[0] = f[1] = 1;

        for(int i = 2;i <= n;i ++)
        {
            if(s[i-1] != '0') f[i] += f[i-1];
            if(decode(s[i-2],s[i-1])) f[i] += f[i-2];
        }

        //for(auto item : f) cout<<item<<" ";
        return f[n];


    }
};

标签:06,映射,示例,int,解码,91,return,方法
From: https://www.cnblogs.com/huangxk23/p/17208235.html

相关文章

  • [GO语言tips05]浅谈GORM常用方法
    0.引言GORM就是通过Go语言直接使用封装好的SQL语句,在使用的时候很多方法,那到底这些东西是如何执行的。主要说一下常见的几个CRUD方法。1.连接数据库使用的是gorm.Open......
  • CF915E 题解(动态开点线段树)
    题目传送门简要题意:题面就挺简要的。看到题目第一眼想到线段树,再看一眼数据范围,\(1≤n≤10^9\),寄,既然不能直接用线段树,那怎么办呢?可以离散化,为了避免麻烦的离散化,......
  • 一个100%立即获得New bing资格的方法教程-点击就送bing chat
    之前加入waitlist的账号一个多月过去了还没有任何反应,但是身边朋友却“点击就送”?深入调查后发现原来是IP的影响,相信说到这里就已经有人知道该怎么做了方法:将节点IP更......
  • Android Js交互,调起Js中的方法
    //调用PC端方法例如方法名为:editBtn()if(Build.VERSION.SDK_INT<18){mWebView.loadUrl("javascript:editBtn()");......
  • Properties和IO流结合的方法
       ......
  • 3、IOC创建对象的方法
    目录3、IOC创建对象的方法4、Spring配置4.1、别名4.2、Bean的配置4.3、import5、依赖注入5.1、构造器注入5.2、Set方式注入【重点】5.3、扩展方式注入5.4、bean的作用域6、......
  • 通俗理解文本生成的常用解码策略
    目录:背景简介解决的问题解码策略StandardGreedySearchBeamSearchSamplingTop-kSamplingSamplingwithTemperatureTop-p(Nucleus)Sampling代码快览......
  • Autofac - 方法注入
    方法注入,其实就是在注册类的时候,把这个方法也注册进去.那么在生成实例的时候,会自动调用这个方法,真的会执行这个方法体内容的。这个方法可以认为不是正常的业务通用......
  • Java ConcurrentModificationException异常原因和解决方法
    场景对ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。出现异常的代码://删除非此退货单对应的货位f......
  • mybatis中的xml中拼接sql中参数与字符串的方法
    场景mybatis中接口方法对应的xml文件中的方法中,需要使用模糊搜索,查询以参数开头的记录。错误的sql拼接:<iftest="locationVO!=nullandlocationVO.selected!=null">......