A message containing letters from A-Z is being encoded to numbers using the following mapping:
1 2 3 4 |
|
Given an encoded message containing digits, determine the total number of ways to decode it.
Example:
Given encoded message “12”, it could be decoded as “AB” (1 2) or “L” (12).
The number of ways decoding “12” is 2.
Solution
解码有多少种方法。一般求“多少”我们考虑使用dp。状态方程如下:
当s[i-2:i]这两个字符是10~26但不包括10和20这两个数时,比如21,那么可以有两种编码方式(BA,U),所以dp[i]=dp[i-1]+dp[i-2]
当s[i-2:i]等于10或者20时,由于10和20只有一种编码方式,所以dp[i]=dp[i-2]
当s[i-2:i]不在以上两个范围时,如09这种,编码方式为0,而31这种,dp[i]=dp[i-1]。
注意初始化时:dp[0]=1,dp[1]=1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|