【剑指offer】 解码方法

  |   0 评论   |   0 浏览

题目

一条包含字母 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