A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Example 1:
Input: "12"
Output: 2
Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Example 2:
Input: "226"
Output: 3
Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
代码
Approach 1: Recursive with memoization
classSolution {HashMap<Integer,Integer> memo =newHashMap<>();publicintnumDecodings(String s) {if (s ==null||s.length() ==0) {return0; }returnrecursiveWithMemo(0, s); }privateintrecursiveWithMemo(int index,String str) {// index + 1 or index + 2if (index ==str.length() || index ==str.length() -1) {return1; }// Ways to decode a string of size 1 is 1. Unless the string is '0'.if (str.charAt(index) =='0') {return0; }if (memo.containsKey(index)) {returnmemo.get(index); }// index + 1int ans =recursiveWithMemo(index +1, str);// index + 2if (Integer.parseInt(str.substring(index, index +2)) <=26) { ans +=recursiveWithMemo(index +2, str); } memo.put(index, ans);return ans; }}
Approach #2 Dynamic Programming
Complexity Analysis
Time Complexity: O(N), where N is length of the string. We iterate the length of dp array which is N+1.
Space Complexity: O(N). The length of the DP array.