Я использовал рекурсивный подход, но вы можете преобразовать его обратно в итеративный , если это необходимо.
Я создал функцию 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