[Leetcode]11.把数字翻译成字符串(动态规划)
作者:互联网
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
思想:首先判断输入数大小,3位以上计算,3位以下直接返回。int转为string,dp数组保存输出,单个数字输出为0存放到dp[0]中,判断2位数的输出存放到dp[1]中.
更新条件为若前一位和当前位能组成10-25的数,那么更新dp[i]=dp[i-2]+dp[i-1],否则评定后缀数不会影响,将解法移入当前位继续判断.遍历到末位结束输出.
当满足规律时,实际上符合斐波那契数列.
func translateNum(num int) int { if num>=10&&num<=25{ return 2 } if num <10{ return 1 } str := strconv.Itoa(num) dp := make([]int,len(str)) for i,_ :=range dp{ dp[i]=1 } if str[:2]>="10"&&str[:2]<="25"{ dp[1]=2 } var i =2 for i<len(str){ if str[i-1]-48==2&&str[i]-48<=5{ dp[i]=dp[i-2]+dp[i-1] }else if str[i-1]-48==1&&str[i]-48<=9{ dp[i]=dp[i-2]+dp[i-1] }else{ dp[i]=dp[i-1] } i++ } return dp[i-1] }
题目来源:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
标签:11,10,num,输出,int,翻译成,Leetcode,dp 来源: https://www.cnblogs.com/End1ess/p/15449545.html