题目如下:

解题思路:这个题目的本质是一个爬楼梯问题,在爬楼梯问题中,每次可以选择走一步或者两步。而本题也是一样的,解码的时候选择解码一个字符或者两个字符,但是加大了一点点难度,要考虑这些情况。1,Z对应的编码是26,所以超过26的连续两个字符不能合并解码,27只能解析成2和7;2,0字符只能和前面的字符合并解码,不能单独作为一个字符解码。

代码如下:

/**
* @param {string} s
* @return {number}
*/
var numDecodings = function(s) {
if(s.length == 0 || parseInt(s) == 0 || s[0] == '0' || s.indexOf('00') != -1){
return 0
}
var ds = ""
for(var i =0 ;i<s.length-1;i++){
if(s[i] == 0){
continue
}
if(s[i+1] != 0){
ds += s[i]
}
else if(s[i] <='2'){
ds += "A"
}
else{
return 0
}
}
if(s[s.length-1] != '0')
ds += s[s.length-1] var dp = new Array(ds.length)
dp[0] = 1 if(ds[0] <='2' && ds[0] > '0' && ds[1] !='A'){
if(ds[0] == 2 && ds[1] >='7'){
dp[1] = 1
}
else{
dp[1] = 2
}
}
else{
dp[1] = 1
} for(var i = 2;i<ds.length;i++) {
if (ds[i] == 'A') {
dp[i] = dp[i - 1]
continue
}
if (ds[i - 1] <= '2' && ds[i - 1] > 0 ) {
if(ds[i-1] == '2' && ds[i] > '6'){
dp[i] = dp[i - 1]
}
else{
dp[i] = dp[i - 1] + dp[i - 2]
}
}
else {
dp[i] = dp[i - 1]
}
}
//console.log(dp)
return dp[ds.length-1]
};

最新文章

  1. OkHttp:Java 平台上的新一代 HTTP 客户端
  2. fzuoop期中练习
  3. .NET WebForm 简介
  4. mysql查询结果添加序列号
  5. 基于ActiveMQ的统一日志服务
  6. LinearLayout使用tips
  7. MySQL在远程访问时非常慢的解决skip-name-resolve 并且出现 Reading from net
  8. 观察者模式-Observer
  9. A Byte of Python 笔记(4)控制流:if、for、while、break、continue
  10. WPF Multi-Touch 开发:高效开发模式
  11. JavaScript 复制对象
  12. Struts 2 之校验器
  13. 点击编辑table变为可编辑状态
  14. ES--06
  15. PHP从入门到精通
  16. Android实现对HOME键的捕获和屏蔽
  17. SQLAlchemy和Flask-SQLAlchemy
  18. Codeforces 932.D Tree
  19. Informatica 常用组件Source Qualifier之四 SQL Query
  20. redhat6.2 系统中文环境改成英文环境

热门文章

  1. Collector的使用
  2. Linux_SystemLogManager
  3. java.io.FileNotFoundException: /usr/local/hadoop/logs/fairscheduler-statedump.log(权限不够)解决方案
  4. C++:输入n个数,通过气泡法从小到大排列顺序(掌握不熟,还请谅解)
  5. 【读书笔记】Git使用
  6. 正反向代理、负载均衡、Nginx配置实现
  7. echart 柱状图X轴显示不全
  8. SpringMVC框架 课程笔记
  9. Linux命令学习(0)
  10. 使用Postwoman