LeetCode—91. Decode Ways

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

'A' -> 1

'B' -> 2

...

'Z' -> 26

Given a non-empty string containing only digits, determine the total number of ways to decode it.

Example 1:

Input:"12"Output:2Explanation:It could be decoded as "AB" (1 2) or "L" (12).


给定一个字符串,由0-9数字构成,1-26分别代表A-Z,问给定的字符串可能代表几种字母组合。

dp算法,首先假设给定dp[k-2]、dp[k-1]的值。

1、考虑第k位能否单独表示一种字母,若第k位不为0,则表示第k位可以单独表示一种字母,则dp[k]首先加上dp[k-1]的值;若第k位为0,则不能单独表示。

2、再考虑第k位能否和k-1位拼成一个字母,则要求是第k-1位不为0而且k-1位的值乘10后加上k位的值,得到的值小于等于26,若符合要求,dp[k]再加上dp[k-2]的值。

要注意该算法要从dp[2]算起(若dp[0]为第一个值),注意初始化dp[0]和dp[1]。


int numDecodings(string s) {

        int n = s.length();

        int dp[n+1];

        dp[0] = 1;

        if(s[0] != '0') dp[1] = 1;

        else dp[1] = 0;     

        for(int i=1; i

            dp[i+1] = 0;

            if(s[i] != '0') dp[i+1] += dp[i];

            if(s[i-1] != '0' && (s[i-1] - '0')*10 + (s[i] - '0') <= 26) dp[i+1] += dp[i-1];

        }

        return dp[n];

    }

你可能感兴趣的:(LeetCode—91. Decode Ways)