SOURCE

var checkOne = function(s) {
    if (s === '*') {
        return 9;
    } else if (s === '0') {
        return 0;
    }
    return 1;
};

var checkTwo = function(s) {
    if (s[0] === '0') {
        return 0;
    } else if (s === '**') {
        return 15;
    } else if ((s[0] = '*' && s[1] !== '*')) {
        const lastNum = parseInt(s[1], 10);
        return lastNum > 6 ? 1 : 2;
    } else if (s[0] !== '*' && s[1] === '*') {
        const firstNum = parseInt(s[0], 10);
        if (firstNum > 2) return 0;
        if (firstNum === 1) return 9;
        return 6;
    }
    const num = parseInt(s, 10);
    return (num > 26 || num === 0) ? 0 : 1;
}


/**
 * @param {string} s
 * @return {number}
 */
var numDecodings = function(s) {
    const len = s.length;
    const dp = new Array(len).fill(0);
    for (let i = 0; i  < len; i++) {
        if (i === 0) {
            dp[i] = checkOne(s[i]);
        } else if (i === 1) {
            dp[i] = dp[i - 1] * checkOne(s[i]) + checkTwo(s.substring(i - 1, i + 1));
        } else {
            dp[i] = dp[i - 1] * checkOne(s[i]) + dp[i - 2] * checkTwo(s.substring(i - 1, i + 1));
        }
    }
    return dp[len - 1];
};

// console.log(numDecodings('2*'))
console.log(numDecodings('10'))
console 命令行工具 X clear

                    
>
console