Description
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
1 | 'A' -> 1 |
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Example 1:
1 | Input: "12" |
Example 2:
1 | Input: "226" |
解法
这道题首先考虑采用DFS解,但是发现有重叠子问题的情况,改用动态规划。数组dp[i]代表s[0,i-1]的解码个数情况。
对于到每一位为止的解码个数结果,分为4种情况考虑:
1.最后两位的结果大于等于10小于等于26(除10与20):
dp[i+1] = dp[i]+dp[i-1](最后的两位可拆开解码)
2.最后两位为10或20
dp[i+1] = dp[i-1](最后两位必须捆绑,等于i-2位的解码个数)
3.其他:
dp[i+1] = dp[i](最后两位必须解绑,等于i-1位的解码个数)
4.末尾为0且大于20,或为00:
dp[i+1] = 0(无解)
可进行逻辑简化,具体代码如下:
1 | class Solution { |