给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi",
"mcfi"和"mzi"
提示:
0 <= num < 231
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 思路
1、动态规划,当前一个数字与当前数字组合大于10小于25说明可组合,
有f(i) = f(i-1) + f(i-2),f(0)=1。否则f(i) = f(i-1) - 代码
package main
import (
"fmt"
"strconv"
)
func translateNum(num int) int {
str := strconv.Itoa(num)
l := len(str)
var dp = make([]int,l)
dp[0] = 1
for i:=1; i<l; i++ {
tmp,_ := strconv.Atoi(string(str[i-1])+string(str[i]))
if tmp <= 25 && tmp >= 10 {
if i-2 < 0 {
dp[i] = dp[i-1] + 1
}else{
dp[i] = dp[i-1] + dp[i-2]
}
}else{
dp[i] = dp[i-1]
}
}
return dp[l-1]
}
func main() {
res := translateNum(12258)
fmt.Println(res)
}