【发布时间】:2018-04-26 03:23:37
【问题描述】:
我被要求在下面的程序中进行编码,并且已经进行了很好的编码。但无法模拟 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代表A,'121'不应该解码为'BCB'而不是'ABA'
-
对不起,我的错误。更新
-
我无法理解您对事件累加器的推理。您的预期输出是什么(尤其是“100200300”)?
-
IMO,应该是:BAACAADAA,KACAADAA,KAUADAA,BAAUADAA。因此 4 应该是输出。
-
我只看了你的算法,但我确信也需要乘法。例如:200200 至少可以解释为 200 200,因为 200 可以解释为两种方式(20 0 或 2 0 0),所以 200200 至少可以解释为 2*2 = 4 种方式。
标签: python dynamic-programming