Menu
CoddyTech

Decode Ways

Wiadomość składającą się z wielkich liter zakodowano za pomocą A = 1, B = 2 itd. aż do Z = 26, a kody zapisano bez separatorów. Mając ciąg cyfr s, zwróć liczbę wiadomości, które mogły go utworzyć.

Literę odczytuje się z jednej cyfry lub dwóch sąsiadujących cyfr, a kod nigdy nie zaczyna się od 0: 06 to nie 6, a samotne 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 literowych, 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.
challenge icon

Pytanie dodatkowe

Co jeśli s może również zawierać *, oznaczającą dowolną cyfrę od 1 do 9? Czy potrafisz policzyć liczbę możliwych odczytów w czasie O(n), modulo 10^9+7?

Zresetuj kod
def numDecodings(s):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argument

s = "2611"

Oczekiwany wynik

4