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

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

题目描述:

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

'A' -> 1'B' -> 2...'Z' -> 26

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

样例:

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

算法分析:

'A'到'Z' 26个字母最多2位最少1位且不为0,因此存在多种解码的可能性。建立一维数组DP[i]表示到当前第i位字符时所能解码的方式,因此对于某一位i,若其不为‘0’,则DP[i] += DP[i-1],若其能与i-1位构成的数字在1到26之间,则DP[i]+=DP[i-2]。因此动态规划表达式为:

    ①S[i]!=0:DP[i] = DP[i-1] + (S[i-1]=='1'||S[i-1]=='2'&&S[i]<='6')?DP[i-2]:0;

    ②S[i]=0:DP[i] = (S[i-1]=='1'||S[i-1]=='2')?DP[i-1]:0;

要注意的一点是在进行二位数判断时直接用字符进行判断即可,Integer.valueOf()反而会增加代码量如对前一位是‘0’的处理等等;

代码:

public class Solution {    /*     * @param s: a string,  encoded message     * @return: an integer, the number of ways decoding     */    public int numDecodings(String s) {        // write your code here        int length = s.length();        //对首位0或空字符串进行处理        if(length==0||s.charAt(0)=='0'){            return 0;        }        int[] result = new int[length+1];        result[0] = 1;        result[1] = 1;        for(int i=1;i

 

转载于:https://www.cnblogs.com/Revenent-Blog/p/7587569.html

你可能感兴趣的文章
物联网世界的承诺与挑战
查看>>
亚马逊低调收购Biba 或下月发布视频消息服务
查看>>
预防和检测如日中天?事件响应表示不服
查看>>
安全和连接是IoT联网设备2大挑战
查看>>
张震博士:SDT是未来安防发展方向
查看>>
CloudCC CRM:物联网必将成为CRM的推动力
查看>>
远程管理服务器的具体操作方法
查看>>
FB宣布将回购60亿美元股票 首席会计官将离职
查看>>
为企业提供本地销售人员的Universal Avenue获1000万美元A轮融资
查看>>
公共交通WiFi末路?公交WiFi重挫 地铁WiFi承受盈利压力
查看>>
直击3.15 安防行业如何维护消费者权益
查看>>
“光伏进社区” 应及早谋划布局
查看>>
2016年光伏电站交易和融资的十大猜想
查看>>
QTP提供的编程接口实现对QTP操作
查看>>
开放医疗交通大数据技术 服务于公共便民领域
查看>>
黑客攻防:关于工业网络安全的那些事
查看>>
诺基亚收购了阿朗:那与 TCL 的“阿尔卡特”品牌授权协议到期后咱办?
查看>>
农业部部署农业大数据发展工作 评:对农业现代化很重要
查看>>
开源中国 2014 年源创会年度计划
查看>>
Postico —— OS X 上的免费 PostgreSQL 客户端
查看>>