A message containing letters from A-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.

**Java Solution**

This problem can be solve by using dynamic programming. It is similar to the problem of counting ways of climbing stairs. The relation is `dp[n]=dp[n-1]+dp[n-2]`

. There are some cases to

public int numDecodings(String s) { int[] dp = new int[s.length() + 1]; dp[0] = 1; if (s.charAt(0) == '0') { return 0; } dp[1] = 1; for (int i = 1; i < s.length(); i++) { char c = s.charAt(i); char p = s.charAt(i - 1); if (c == '0' && (p == '0' || p > '2')) { return 0; } if (p == '0') { dp[i + 1] = dp[i]; } else if (p == '1') { if (c == '0') { dp[i + 1] = dp[i - 1]; } else { dp[i + 1] = dp[i - 1] + dp[i]; } } else if (p == '2') { if (c == '0') { dp[i + 1] = dp[i - 1]; } else if (c <= '6') { dp[i + 1] = dp[i] + dp[i - 1]; } else { dp[i + 1] = dp[i]; } } else { dp[i + 1] = dp[i]; } } return dp[s.length()]; } |

found a really nice explanation of this question, check this out

https://youtu.be/Km4iqih6WjI