Преобразовать введенный номер в алфавитное представление - PullRequest
0 голосов
/ 26 апреля 2018

Меня попросили запрограммировать код и в значительной степени закодировали.Но не в состоянии смоделировать 0 рассмотрение дела, где я пропускаю?Ниже приведен вопрос и код:

Пусть 0 представляет «A», 1 представляет «B» и т. Д. Учитывая последовательность цифр, подсчитайте количество возможных расшифровок данной последовательности цифр.

Input: digits [] = "121" Output: 3 (Возможные расшифровки: "BCB", "BV", "MB"). Точно так же "200" можно интерпретировать как "caa" или "ua", а "007" имеетone.

Мой код:

def countValidSequences(input_num):

    n = len(input_num)
    number = list(input_num)

    occurance = [0] * (n+1) 
    occurance[0] = 1
    occurance[1] = 1

    for i in range(2, n+1):

        occurance[i] = 0

        if (number[i-1] > '0'):
            occurance[i] += occurance[i-1]

        if (number[i-2] < '2' or (number[i-2] <= '2' and number[i-1] < '6') ):
            occurance[i] += occurance[i-2]

    return occurance[n]



print("Count ",countValidSequences("200"))
print("Count ",countValidSequences("2563"))
print("Count ",countValidSequences("123"))
print("Count ",countValidSequences("99"))
print("Count ",countValidSequences("100200300"))

O / P:

Count  1
Count  2
Count  3
Count  1
Count  3

Это прекрасно работает для ввода, не имеющего 0, есть идеи, где я пропускаю?

1 Ответ

0 голосов
/ 26 апреля 2018

Я использовал рекурсивный подход, но вы можете преобразовать его обратно в итеративный , если это необходимо.

Я создал функцию valid_two_digit_encoding.Создав меньшую именованную функцию, легко проверить, правильно ли она работает.В вашем коде я не уверен, что if (number[i-2] < '2' or (number[i-2] <= '2' and number[i-1] < '6') ) должен делать, и вы не можете проверить его отдельно, чтобы увидеть, работает ли он.«00» соответствует этому условию.Это то, что вы намеревались?

Конечным условием является то, что если есть только 1 цифра, то есть только одна кодировка.

Если двухзначное число является допустимой кодировкой, нам нужно добавить все другие возможные кодировки, начиная с этого.Кроме того, нам всегда нужны кодировки, начиная с однозначной версии.

def valid_two_digit_encoding(a, b):
    if not a or not b:
        return False
    if a in ('1', '2') and b < '6':
        return True
    return False

def valid_sequences(input_num):
    if len(input_num) <= 1:
        return 1

    encodings = 0
    if valid_two_digit_encoding(input_num[0], input_num[1]):
        encodings += valid_sequences(input_num[2:])

    encodings += valid_sequences(input_num[1:])

    return encodings


def countValidSequences(input_num):
    return valid_sequences(input_num)

# Input "1" output 1
print("Count ",countValidSequences("1"))
# Input "121" output 3
print("Count ",countValidSequences("121"))
# Input "200" output 2
print("Count ",countValidSequences("200"))
# Input "007" output 1
print("Count ",countValidSequences("007"))
# Input "2563" output 2
print("Count ",countValidSequences("2563"))
# Input "123" output 3
print("Count ",countValidSequences("123"))
# Input "99" output 1
print("Count ",countValidSequences("99"))
# Input "100200300" output 4
print("Count ",countValidSequences("100200300"))
# Input "2222" output 5
print("Count ",countValidSequences("2222"))
# Input "312" output 2
print("Count ",countValidSequences("312"))

Какие выходы:

Count  1
Count  3
Count  2
Count  1
Count  2
Count  3
Count  1
Count  4
Count  5
Count  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...