A message containing letters fromA-Zis 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.
思路:动态规划算法
Java代码实现
public class Solution {
public int numDecodings(String s) {
if(s == null || s.length() == 0 || s.charAt(0) =='0')
return 0;
int len = s.length();
//dp[i]代表字符串前i个元素能组成编码个数,数组元素默认值均为0
int[] dp = new int[len + 1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i < len+1; i++){
// (1)如果1 <= s[i-1] <= 9,则dp[i] += dp[i-1];
// (2)如果10 <= s[i-2 ~ i-1] <= 26, 则dp[i] += dp[i-2].
//判断一位数字是否符合条件
if(s.charAt(i-1) >= '1' && s.charAt(i-1) <= '9'){
dp[i] += dp[i-1];
}
//判断两位数字是否符合条件
if(Integer.valueOf(s.substring(i-2,i)) >= 10 && Integer.valueOf(s.substring(i-2,i)) <= 26){
dp[i] += dp[i-2];
}
}
return dp[len];
}
}