博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解码方法
阅读量:7036 次
发布时间:2019-06-28

本文共 1233 字,大约阅读时间需要 4 分钟。

题目:

有一个消息包含A-Z通过以下规则编码

图片描述
现在给你一个加密过后的消息,问有几种解码的方式?

样例:

给你的消息为12,有两种方式解码 AB(12) 或者 L(12). 所以返回 2。

思路:

图片描述

所以:递推式类似于爬楼梯问题: res[i] = res[i-1]+res[i-2]
分析:s[i-1]单独解释的时候,前面可以有res[i-1]种解释方法,如果s[i-1]和s[i-2]共同解释的时候,前面就有res[i-2]种解释方法。
但是需要加更多的限制条件:
1.s[i-1]不能为0,如果是0的话,res[i]就只可能是res[i-2],且满足s[i-2]是1或者2;
2.在s[i-2,i-1]的值大于10小于27的时候,满足res[i] = res[i-1]+res[i-2] 。否则s[i-1]只能单独解释,因此res[i] = res[i-1]。

参考答案:

class Solution {public:    /*     * @param s: a string,  encoded message     * @return: an integer, the number of ways decoding     */    int numDecodings(string &s) {        // write your code here        int n = s.length();        if(n==0)   return 0;        if(s[0] =='0')  return 0;                int res[n+1];        res[0] = 1;        res[1] = 1;                for(int i=2; i<=n; i++)        {            if(s[i-1] == '0')            {                if(s[i-2]=='1' | s[i-2]=='2')                    res[i] = res[i-2];                else                    return 0;            }                        //else if(s[i-2]=='1' || s[i-2] == '2' && s[i-1]<='6')            else if(s.substr(i-2,2) <= "26" && s.substr(i-2,2)>"10")                       {                res[i] = res[i-1] + res[i-2];                //cout<<<" "<
<

转载地址:http://ekfal.baihongyu.com/

你可能感兴趣的文章
混乱字符串的字段提取
查看>>
我的友情链接
查看>>
深度有趣 | 10 股票价格预测
查看>>
Java虚拟机类加载机制
查看>>
Load Balance 产品横向比较
查看>>
HTML5 多线程处理
查看>>
mpls的基本概念
查看>>
【Spring Boot】20.RabbitMQ高级
查看>>
微信分享link问题
查看>>
为大家介绍Authorware中的交互功能
查看>>
Laravel 开发 RESTful API 的一些心得
查看>>
springboot项目(2)
查看>>
linux系统运维成长记
查看>>
内核参数优化/etc/sysctl.conf
查看>>
对象标签1
查看>>
MacOS下安装MongoDB数据库
查看>>
Git常用命令
查看>>
libevent学习
查看>>
动态代理的几种方式
查看>>
Collections常用方法总结
查看>>