剑指:把数字翻译成字符串

  

题目要求:
给定一个数字,按照如下规则翻译成字符串:0翻译成“一”,1翻译成“b”……25翻译成“z”。一个数字有多种翻译可能,例如12258年一共有5种,分别是bccfi, bwfi, bczi, mcfi, mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。

  
 <代码> # - * -编码:utf - 8 - *
  # @Time: 2019-07-10 13分
  # @Author: Jayce黄
  # @ProjectName:工作
  # @FileName: getTranslationCount.py
  # @Blog: https://blog.51cto.com/jayce1111
  # @Github: https://github.com/SysuJayce
  
  def getTranslationCount(数量):
  ”“”
  要将一个数字转化成一个字符串,由于这个数字有很多位,我们最直观的就是从头开始,一位一位地去转化。
  比如给定12258。我们可以先把1翻译成b,然后剩下2258;也可以先把12翻译成m,然后剩258下……
  
  由此可见是一个递归问题,用递归的思路分析题目,用循环来解决问题(动态规划)
  递推公式为:(i)=f (i + 1) + g(我+ 1)x f (i + 2)
  
  其中f(我)表示到下标为我的数字为止,共有多少种可能的翻译。之所以写成向前递推的公式,是因为如果我
  们从前往后翻译,会出现很多重复的子问题,比如12258=1 | 2258年,其中2258=2 | 258年,而12258=12 | 258年,
  258年这样就重复了。
  所以我们从后往前翻译,就可以避免这样的重复子问题。
  ”“”
  def助手(s):
  #一个数字至少有一种翻译,因此可以先设置一个全为1的数组,长度对应数字的位数加一
  数量=[1]* (len (s) + 1)
  #对于前面的n - 1位
  因为我在范围(len (s) - 2 1 1):
  #我第位至少有和第i + 1位一样多的翻译数
  数=(i + 1)
  #如果我第位和第i + 1位可以组合成一个汽车销售的数字,那么g(我+ 1)=1
  # f (i)=f (i + 1) + g(我+ 1)x f (i + 2)
  #由于我们设置的数组长度是位数+ 1,因此这里我+ 2不可能越界
  如果10 & lt;=int (s[我+ 2])& lt;=25:
  数+=(+ 2)
  [我]=计数
  返回计算[0]
  
  #由于0对应,25对应z,因此小于0的输入是无效的
  如果数量& lt;0:
  返回0
  
  返回助手(str(数量)
   

剑指:把数字翻译成字符串