1
0
Fork 0
mirror of https://gitlab.com/mfocko/LeetCode.git synced 2024-09-16 16:36:56 +02:00
LeetCode/java/decode-ways.java
Matej Focko f0cdb67ac1
chore(java): format
Signed-off-by: Matej Focko <mfocko@redhat.com>
2024-03-02 21:01:53 +01:00

50 lines
1 KiB
Java

class Solution {
private static final int EMPTY = -1;
private static int charToDigit(String s, int i) {
return s.charAt(i) - '0';
}
private int numDecodings(String s, int[] dp, int i) {
// out of bounds
if (i < 0 || i > s.length()) {
return 0;
}
// final digit
if (i == s.length()) {
return 1;
}
// starting with 0, not allowed
if (s.charAt(i) == '0') {
return 0;
}
// solution has been already precomputed
if (dp[i] != EMPTY) {
return dp[i];
}
// taking just one digit
int result = numDecodings(s, dp, i + 1);
// taking two digits
if (i + 1 < s.length() && charToDigit(s, i) * 10 + charToDigit(s, i + 1) <= 26) {
result += numDecodings(s, dp, i + 2);
}
// save and return
dp[i] = result;
return result;
}
public int numDecodings(String s) {
int[] dp = new int[s.length()];
for (int i = 0; i < dp.length; ++i) {
dp[i] = EMPTY;
}
return numDecodings(s, dp, 0);
}
}