A message containing letters fromA-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.
tag: DP
经典DP,类似stairs
class Solution {
public int numDecodings(String s) {
if (s == null || s.length() == 0) return 0;
int n = s.length();
int[] dp = new int[n + 1];
dp[0] = 1;
if (n >= 1){
dp[1] = s.charAt(0) == '0' ? 0 : 1;
}
for (int i = 2; i <= n; i++){
int digit1 = Integer.valueOf(s.substring(i - 1, i));
int digit2 = Integer.valueOf(s.substring(i - 2, i));
if (digit1 > 0 && digit1 <= 9){
dp[i] += dp[i - 1];
}
if (digit2 >= 10 && digit2 <= 26){
dp[i] += dp[i - 2];
}
}
return dp[n];
}
}