博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode/LeetCode] Decode Ways [String to Integer]
阅读量:6256 次
发布时间:2019-06-22

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

Problem

A message containing letters from A-Z is being encoded to numbers using the following mapping:

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

Given an encoded message containing digits, determine the total number of ways to decode it.

Example

Given encoded message 12, it could be decoded as AB (1 2) or L (12).

The number of ways decoding 12 is 2.

Note

parseInt将子字符串转化为int,参见parseIntvalueOf的;

然后用动规方法:
dp[i]表示字符串s的前i位(0i-1)包含decode方法的个数。
若前一位i-2到当前位i-1的两位字符串s.substring(i-2, i)对应的数字lastTwo在10到26之间,则当前位dp[i]要加上这两位字符之前一个字符对应的可能性:dp[i-2];
若当前位i-1的字符对应1到9之间的数字(不为0),则当前dp[i]要加上前一位也就是第i-2位的可能性:dp[i-1]
最后返回对应字符串s末位的动规结果dp[n]

Solution

updated 2018-9

class Solution {    public int numDecodings(String s) {        if (s == null || s.length() == 0) return 0;        int n = s.length();        int[] dp = new int[n+1];        dp[0] = 1;                                                  //if the first two digits in [10, 26]        dp[1] = s.charAt(0) == '0' ? 0 : 1;        for (int i = 2; i <= n; i++) {            if (s.charAt(i-1) != '0') dp[i] += dp[i-1];             //XXX5X            int lastTwo = Integer.parseInt(s.substring(i-2, i));            if (lastTwo >= 10 && lastTwo <= 26) dp[i] += dp[i-2];   //XXX10X        }        return dp[n];    }}

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

你可能感兴趣的文章
Oracle更新时间字段
查看>>
Android 四大组件学习之ContentProvider二
查看>>
使用jcaptcha插件生成验证码
查看>>
centos6.5 (linux) 禁用模块 IPV6模块的方法
查看>>
用webpack2.0构建vue2.0超详细精简版
查看>>
从分类,排序,top-k多个方面对推荐算法稳定性的评价
查看>>
006_ssl监测及评分
查看>>
ES6中的模块
查看>>
ubuntu16.04 登录密码破解方法
查看>>
Retrofit2.0+OkHttp打印Request URL(请求地址参数)
查看>>
19-hadoop-fof好友推荐
查看>>
自己定义View学习之12/7(进度条之混合模式)
查看>>
Android零基础入门第5节:善用ADT Bundle,轻松邂逅女神
查看>>
momentum公式
查看>>
Git合并最近的commit
查看>>
面向对象高级——Object类、包装类以及匿名内部类
查看>>
(转)Mybatis insert后返回主键给实体对象(Mysql数据库)
查看>>
SFTP环境搭建及客户代码调用公共方法封装
查看>>
功能的权衡——推荐功能做不做?
查看>>
用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障
查看>>