Итак, я пытаюсь решить проблему способов декодирования Leetcode (https://leetcode.com/problems/decode-ways/), и я нахожу их решение запутанным.
def recursiveWithMemo(self, index, s) -> int:
# If you reach the end of the string
# Return 1 for success.
if index == len(s):
return 1
# If the string starts with a zero, it can't be decoded
if s[index] == '0':
return 0
if index == len(s)-1:
return 1
answer = self.recursiveWithMemo(index + 1, s)
if int(s[index : index + 2]) <= 26:
answer += self.recursiveWithMemo(index + 2, s)
return answer
def numDecodings(self, s: str) -> int:
return self.recursiveWithMemo(0, s)
Я не могу понять, почему index == len(s) и index == len(s) - 1 условия используются? Индекса == len(s) - 1 недостаточно, чтобы проверить, достигли ли мы конца строки?
index == len(s) - 1
достаточно, чтобы проверить, достигли ли мы конца строки, но все же в этом алгоритме они делают шаги размером 2
. Проверка идентификатора index == len(s)
не потому, что они хотят проверить, достигли ли они конца строки или нет, а скорее они проверяют это, чтобы не столкнуться с ошибкой в следующей строке:
# If the string starts with a zero, it can't be decoded
if s[index] == '0':
return 0
если index = len(s)
условие if s[index] == 0
выдаст вам ошибку.