【leetcode】Decode Ways
2024-09-13 15:09:51
题目如下:
解题思路:这个题目的本质是一个爬楼梯问题,在爬楼梯问题中,每次可以选择走一步或者两步。而本题也是一样的,解码的时候选择解码一个字符或者两个字符,但是加大了一点点难度,要考虑这些情况。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]
};
最新文章
- OkHttp:Java 平台上的新一代 HTTP 客户端
- fzuoop期中练习
- .NET WebForm 简介
- mysql查询结果添加序列号
- 基于ActiveMQ的统一日志服务
- LinearLayout使用tips
- MySQL在远程访问时非常慢的解决skip-name-resolve 并且出现 Reading from net
- 观察者模式-Observer
- A Byte of Python 笔记(4)控制流:if、for、while、break、continue
- WPF Multi-Touch 开发:高效开发模式
- JavaScript 复制对象
- Struts 2 之校验器
- 点击编辑table变为可编辑状态
- ES--06
- PHP从入门到精通
- Android实现对HOME键的捕获和屏蔽
- SQLAlchemy和Flask-SQLAlchemy
- Codeforces 932.D Tree
- Informatica 常用组件Source Qualifier之四 SQL Query
- redhat6.2 系统中文环境改成英文环境
热门文章
- Collector的使用
- Linux_SystemLogManager
- java.io.FileNotFoundException: /usr/local/hadoop/logs/fairscheduler-statedump.log(权限不够)解决方案
- C++:输入n个数,通过气泡法从小到大排列顺序(掌握不熟,还请谅解)
- 【读书笔记】Git使用
- 正反向代理、负载均衡、Nginx配置实现
- echart 柱状图X轴显示不全
- SpringMVC框架 课程笔记
- Linux命令学习(0)
- 使用Postwoman