python - 将输入数字转换为字母表示

标签 python dynamic-programming

我被要求在下面的程序中进行编码并且已经编码到很好的程度。但无法模拟 0 案例考虑,我在哪里失踪?下面是问题和代码:

设0代表'A',1代表'B',等等。给定一个数字序列,计算给定数字序列可能解码的次数。

输入:数字[] = "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 的输入,它工作正常,知道我遗漏了什么吗?

最佳答案

我采用了递归方法,但你可以转换它 back to iterative如果需要的话。

我创建了一个名为 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

关于python - 将输入数字转换为字母表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50034347/

相关文章:

c++ - Google Protobuf 基于 C++ 的 Python 实现的性能

python - Django "./manage.py runserver"记录到文件而不是控制台

Python Pandas 将选择性列转换为行

algorithm - 间隔列表中范围非重叠间隔的最大总和

c++ - 如何在 SPOJ Feynman 中应用动态规划?

algorithm - 给定 C 案例和 D 允许跌落,您可以测试的最大楼层数

c++ - 分区相等子集总和Leetcode:运行时错误

c++ - 迭代方法似乎比递归实现(硬币找零)慢

python - 快速将 numpy 数组加载到 Fortran 中

python - 如何将文件数据存储为类对象?