Featured image of post 剑指 Offer 46. 把数字翻译成字符串

剑指 Offer 46. 把数字翻译成字符串

题目描述

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

示例 1:

  • 输入: 12258
  • 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”

提示:

  • 0 <= num < 231

解法一:动态规划

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
func translateNum(num int) int {
    str := fmt.Sprintf("%d", num)
    dp := make([]int, len(str)+1)
    n := len(dp)
    dp[0], dp[1] = 1, 1
    for i := 2; i < n; i++ {
        dp[i] = dp[i-1]
        if str[i-2] != '0' {
            num, _ := strconv.Atoi(str[i-2 : i])
            if 10 <= num && num <= 25 {
                dp[i] += dp[i-2]
            }
        }
    }
    return dp[n-1]
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/30 10:35:09
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计