package com.interview.dynamic; import java.util.HashMap; import java.util.Map; /** * A message containing letters from A-Z is being encoded to numbers using the following mapping: * 1 -> A * 2 -> B * 3 -> C * 26-> Z * Given an encoded message containing digits, determine the total number of ways to decode it. * * https://leetcode.com/problems/decode-ways/ */ public class DecodeWays { public int numDecodings(String s) { if (s.length() == 0) { return 0; } Map<Integer, Integer> count = new HashMap<>(); return numDecodingsUtil(s, 0, count); } public int numDecodingsUtil(String s, int start, Map<Integer, Integer> count) { if (s.length() == start) { return 1; } if (count.containsKey(start)) { return count.get(start); } String s1 = s.substring(start, start + 1); if (s1.equals("0")) { count.put(start, 0); return 0; } int c1 = numDecodingsUtil(s, start + 1, count); int c2 = 0; if (start < s.length() - 1) { s1 = s.substring(start, start + 2); if (Integer.valueOf(s1) <= 26) { c2 = numDecodingsUtil(s, start + 2, count); } } count.put(start, c1 + c2); return c1 + c2; } }