剑指 Offer 46. 把数字翻译成字符串(golang版)

  • 题目描述
给定一个数字,我们按照如下规则把它翻译为字符串: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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值