【剑指offer】 解码方法
题目
一条包含字母 A-Z 的消息通过以下映射进行了 编码 :
'A' -> 1
'B' -> 2
...
'Z' -> 26
要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:
"AAJF" ,将消息分组为 (1 1 10 6)
"KJF" ,将消息分组为 (11 10 6)
注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。
给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。
题目数据保证答案肯定是一个 32 位 的整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-ways
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的答案
/**
* @param {string} s
* @return {number}
*/
var numDecodings = function (s) {
if (s.startsWith('0')) {
return 0;
}
let pre = 1;
let prePre = 1;
for (var i = 1; i < s.length; i++) {
let tmp1=0;
let tmp2=0;
if (s[i] != '0') {
tmp1 = pre;
}
if (s[i-1] != '0' && (+(s[i-1] + s[i]) <= 26)) {
tmp2 = prePre;
}
prePre = pre;
pre = tmp1 + tmp2;
}
return pre;
};
又是一道经典的动态规划。动态规划的状态转移方程f(n)=f(n-1)+f(n-2); 这时候需要确定的是f(n-1)\f(n-2) 是什么情况。
标题:【剑指offer】 解码方法
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/10/02/1633176576118.html