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.
For example,
Given encoded message
Given encoded message
"12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding
"12"
is 2.
Solution: Dynamic Programming.
Note that if a message starts with 0, there is no feasible way to decode it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class Solution { private int[] ways; private int numDecodings(String s, int i) { if (i >= s.length()) { return 1; } if (s.charAt(i) == '0') { return 0; } if (ways[i] > -1) { return ways[i]; } ways[i] = numDecodings(s, i + 1); if ( i + 2 <= s.length() && Integer.valueOf(s.substring(i, i + 2)) <= 26 ) { ways[i] += numDecodings(s, i + 2); } return ways[i]; } public int numDecodings(String s) { if (s.length() == 0) { return 0; } ways = new int[s.length()]; Arrays.fill(ways, -1); return numDecodings(s, 0); } } |
No comments:
Post a Comment