python - 将给定字母表的字符串转换为整数

标签 python algorithm

我有一个工作函数,可以将给定字母表 A 上的整数转换为长度为 k 的字符串

def ToString(x, k, A):
    """
    Args:
       x (int):     Integer x ∈ N
       k (int)      String length k >= log_N (x)
       A (list)     Alphabet A = {c_1, ..., c_N}
    """

    S = ""
    N = len(A)

    for i in reversed(range(0, k)):
        s_k = A[x % N]
        x = x // N
        S += s_k

    return S

测试:

  A = ['0', '1']  # Alphabet
  k = 8           # length
  x = 5           # the number to convert
  s = ToString(x, k, A) # s = '10100000'

所以现在我基本上需要这个函数的精确逆函数,所以我可以将字符串 '10100000' 和给定的字母表转换回 5

def ToInteger(S, A):
    """    
    Args:
       S (str):     String
       A (list):    Alphabet

    Returns:
       int:         Integer
    """
    x = 0
    for i in range(len(S)):
        x = len(A) * x + len(A)-1-A.index(S[i])
    return x

不幸的是,这会返回垃圾:

i = StringToInteger('10100000',['0','1']) # = 95

这是算法规范的样子: enter image description here

错在哪里?

最佳答案

尝试在你的第一个函数中使用 S = s_k + S 而不是 S += s_k 然后使用这个函数:

def toInteger(S, A):
   x = 0
   for i in range(len(S)):
     x += (len(A) ** (len(S) - 1 - i)) * (A.index(S[i]))
   return x

关于python - 将给定字母表的字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43027700/

相关文章:

python - windows机器上python的无缓冲字符输入

algorithm - DFA运行时间不是O(n)而是O(nm)

algorithm - 如何赢得这场比赛?

algorithm - 如何缩放由点组成的形状?

c++ - C++中解决对象间的依赖关系

Python:如何摆脱每个子列表的第二个元素?

python - 将对数正态分布的拟合 PDF 缩放为 python 中的直方图

python - 为什么追加到列表会破坏我的 for 循环? (Python)

python - 创建 C :\Anaconda2 directory 的 Python(x,y) 安装出现问题

c - 如何生成长度恰好等于 8 的所有标记的集合