Способы декодирования Leetcode - проверка индекса дважды

Итак, я пытаюсь решить проблему способов декодирования 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 недостаточно, чтобы проверить, достигли ли мы конца строки?

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
0
0
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 выдаст вам ошибку.

Другие вопросы по теме