Menu
CoddyTech

Decode Ways

Wiadomość zapisana wielkimi literami została zamieniona na cyfry za pomocą kodu A = 1, B = 2 i tak dalej aż do Z = 26, a kody zapisano jeden po drugim, bez separatorów. Otrzymujesz ciąg cyfr s. Zwróć liczbę różnych wiadomości, które mogły go utworzyć.

Każdą literę odczytuje się z jednej cyfry albo z dwóch sąsiadujących ze sobą cyfr, a kod nigdy nie zaczyna się od 0: 06 to nie 6, a samo 0 nie jest literą. Jeśli żaden odczyt nie jest możliwy, zwróć 0.

Funkcja

numDecodings(s: string) → integer
sstring
ciąg cyfr do zdekodowania
Zwracainteger
liczba wiadomości składających się z liter, które kodują się na s

Ograniczenia

  • 1 ≤ s.length ≤ 100
  • s zawiera wyłącznie cyfry od 0 do 9 i może zaczynać się od 0.
  • Każdy prefiks i każdy sufiks s ma mniej niż 231 odczytów, więc odpowiedź i każda liczba, którą obliczysz po drodze, mieszczą się w 32-bitowej liczbie całkowitej ze znakiem.

Przykłady

Wejście
s = "2611"
Wyjście
4
Wyjaśnienie
Cztery odczyty to 2 6 1 1 (BFAA), 26 1 1 (ZAA), 2 6 11 (BFK) i 26 11 (ZK). Środkowe cyfry nigdy nie tworzą pary, ponieważ 61 jest większe niż 26.

lock icon+25 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

A co, jeśli s może również zawierać *, który oznacza dowolną cyfrę od 1 do 9? Czy potrafisz policzyć odczyty w czasie O(n), zwracając wynik modulo 10^9+7?

Zresetuj kod
def numDecodings(s):
    # Napisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

s = "2611"

Oczekiwane

4