LeetCode题库解答与分析——#91. 解码方法DecodeWays

包含 A-Z 的字母的消息通过以下规则编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26

给定一个包含数字的编码消息,请确定解码方法的总数。

例如,
给定消息为 "12", 它可以解码为 "AB"(1 2)或 "L"(12)。

"12" 的解码方法为 2 种。

A message containing letters from A-Z is being encoded to numbers using the following mapping:

'A' -> 1
'B' -> 2
...
'Z' -> 26

Given an encoded message containing digits, determine the total number of ways to decode it.

For example,
Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).

The number of ways decoding "12" is 2.

个人思路:

只有1-26的数字可以转换为字母,从而才会有两种解读方式;0则无法解读,则解读方式为0;大于26则只可以分别解读,即只有一种方式。将每一个数字都作为最后一个要解读的数字,由最右向左依次解读。如果数字为0则到达该位置的方式数为0;如果数字为1-26,则为前两位的方式数之和;如果大于26,则等于前一位的方式数。

代码(JavaScript):

/**
 * @param {string} s
 * @return {number}
 */
var numDecodings = function(s) {
    var length=s.length;
    if(length==0||parseInt(s.charAt(0))==0){
        return 0;    
    }
    var ways=new Array(length+1);
    ways[length]=1;
    if(parseInt(s.charAt(length-1))!=0){
        ways[length-1]=1;
    }
    else{
        ways[length-1]=0;
    }
    for(var i=length-2;i>=0;i--){
        if(parseInt(s.charAt(i))==0){
            ways[i]=0;
            continue;
        }
        else if(parseInt(s.substring(i,i+2))<=26){
            ways[i]=ways[i+1]+ways[i+2];
        }
        else{
            ways[i]=ways[i+1];
        }
    }
    return ways[0];
};

你可能感兴趣的:(LeetCode)