将长号转换为相应的字母组合

时间:2015-09-23 07:15:06

标签: python letters-and-numbers

给定一个数字,将其翻译成相应字母的所有可能组合。例如,如果给定数字1234,则应该吐出abcdlcdawd,因为与字母对应的数字组合可以是1 2 3 412 3 41 23 4

我正在考虑用Python做到这一点的方法,老实说我很难过。任何提示?

到目前为止,我基本上只设置了一个简单的系统来将单个数字转换成字母。

2 个答案:

答案 0 :(得分:1)

制作str

partition中实施here

过滤数字超过26的列表。

写回函数的函数。

def alphabet(n):
    # return " abcde..."[n]
    return chr(n + 96)


def partition(lst):
    for i in range(1, len(lst)):
        for r in partition(lst[i:]):
            yield [lst[:i]] + r
    yield [lst]


def int2words(x):
    for lst in partition(str(x)):
        ints = [int(i) for i in lst]
        if all(i <= 26 for i in ints):
            yield "".join(alphabet(i) for i in ints)


x = 12121
print(list(int2words(x)))
# ['ababa', 'abau', 'abla', 'auba', 'auu', 'laba', 'lau', 'lla']

答案 1 :(得分:0)

我不会给你一个完整的解决方案,但想知道从哪里开始:

我会将数字转换为字符串并迭代字符串,因为字母表有26个字符,您只需要检查一位和两位数字。

正如在上面的评论中,递归方法将起到作用,例如:

数字是1234

*)取第一个字符 - &gt;数字是1

*)从那里将它与所有剩余的1位数字相结合 - &gt;

%Z

*)然后将其与下一个2位数字(如果&lt; = 26)和剩余的1位数字组合 - &gt;

      1 2 3 4

*)......等等

正如我所说,它只是一个从哪里开始的想法,但基本上它是一种使用组合学的递归方法,包括检查两位数字是否大于26,因此超出字母表。

相关问题