zoukankan      html  css  js  c++  java
  • JZ69 把数字翻译为字符串

    把数字翻译为字符串

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

    思路:递归,遍历数字的位,当前位翻译一种方法,如果当前位和下一位能结合成另一种翻译,则有可记录为一种方法。但是递归会找出重复计算,如12258会计算1,2258和12,258,而2258会2,258,我们定义f(i)表示从第i位数字开始的不同翻译的数目,那么f(i) = f(i + 1) + g(i,i + 1) * f(i + 2)。当第i位和第i + 1位两位数字拼接起来的数字在10 ~ 25的范围内时,函数g(i,i + 1)的值为1,否则为0.

    有重复,可以使用动态规划。从后往前求,比记录翻译方法数。

    func translateNum(num int) int {
        src := strconv.Itoa(num)
        p, q, r := 0, 0, 1
        for i := 0; i < len(src); i++ {
            p, q, r = q, r, 0
            r += q
            if i == 0 {
                continue
            }
            pre := src[i-1:i+1]
            if pre <= "25" && pre >= "10" {
                r += p
            }
        }
        return r
    }
  • 相关阅读:
    Groovy Urlencode编码
    PowerShell导入自定义公共函数
    Groovy获取对象类型、属性
    adb名称操作模拟器
    《坚不可摧》——乔布斯演讲
    马拉松节奏跑(转载)
    马拉松配速
    什么是思考力三要素?(转载)
    Python解析JSON为实体
    excel宏的用法
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642860.html
Copyright © 2011-2022 走看看