Я пытаюсь решить вопрос, и мой вопрос здесь , почему мое решение не работает?. Вот вопрос и ниже ответа.
Вопрос, взятый из leetcode: http://oj.leetcode.com/problems/decode-ways/
Сообщение, содержащее буквы из A-Z, кодируется в числа, используя следующее отображение:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Учитывая кодированное сообщение, содержащее цифры, определите общее количество способов его декодирования.
Например, учитывая кодированное сообщение "12", оно может быть расшифровано как "AB" (1 2) или "L" (12). Количество способов декодирования "12" равно 2.
Мое решение:
Точка с моим решением идет назад и умножает количество опций, если найден раскол. Под расколом я имею в виду, что цифры можно интерпретировать двумя способами. Например: 11 может интерпретироваться двумя способами: "aa" или "k".
public class Solution {
public int numDecodings(String s) {
if (s.isEmpty() || s.charAt(0) == '0') return 0;
int decodings = 1;
boolean used = false; // Signifies that the prev was already use as a decimal
for (int index = s.length()-1 ; index > 0 ; index--) {
char curr = s.charAt(index);
char prev = s.charAt(index-1);
if (curr == '0') {
if (prev != '1' && prev != '2') {
return 0;
}
index--; // Skip prev because it is part of curr
used = false;
} else {
if (prev == '1' || (prev == '2' && curr <= '6')) {
decodings = decodings * 2;
if (used) {
decodings = decodings - 1;
}
used = true;
} else {
used = false;
}
}
}
return decodings;
}
}
Сбой происходит на следующем входе:
Input:"4757562545844617494555774581341211511296816786586787755257741178599337186486723247528324612117156948"
Output: 3274568
Expected: 589824