1public int numDecodings(String s) {
2 if (s == null || s.length() == 0 || s.charAt(0) == '0') return 0;
3
4 int n = s.length();
5 int[] dp = new int[n + 1];
6 dp[0] = 1;
7
8 for (int i = 1; i <= n; i++) {
9 // Single digit decode
10 if (s.charAt(i - 1) != '0') {
11 dp[i] += dp[i - 1];
12 }
13
14 // Two digit decode
15 if (i > 1 && (s.charAt(i - 2) == '1' ||
16 (s.charAt(i - 2) == '2' && s.charAt(i - 1) <= '6'))) {
17 dp[i] += dp[i - 2];
18 }
19 }
20
21 return dp[n];
22}