我被问到下面的程序代码,并在很大程度上编码。但是无法模拟0个案例的考虑,我错过了哪里?以下是问题和代码:
设0代表'A',1代表'B'等。给定一个数字序列,计算给定数字序列的可能解码次数。
输入:digits [] =" 121" 输出:3(可能的解码是" BCB"," BV"," MB") 同样地" 200"可以解释为" caa"或" ua"和" 007"有一个。
我的代码:
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的输入,它可以正常工作,不知道我在哪里丢失?
答案 0 :(得分:1)
我采用了递归方法,但如果需要,您可以将其转换为back to iterative。
我创建了一个名为valid_two_digit_encoding的函数。通过创建一个较小的命名函数,可以很容易地测试它是否正常工作。在你的代码中,我不确定if (number[i-2] < '2' or (number[i-2] <= '2' and number[i-1] < '6') )
应该做什么,你不能单独检查它是否有效。 '00'符合这个条件。那是你的意图吗?
结束条件是如果只有一个数字,则只有一个编码。
如果两位数字是有效编码,我们需要添加所有其他可能的编码。此外,我们始终需要以一位数版本开头的编码。
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