题解 | #把数字翻译成字符串#

把数字翻译成字符串

http://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

这个题本身不难,状态转移方程也好写,主要麻烦的是0的存在。

设dp[i]为到第i个字符为止的数组共有多少中译码方式,于是状态转移方程如下:

dp[i+1]=dp[i],if nums[i1,i+1]>26 or nums[i+1]==0 or num[i]==0dp[i+1]=dp[i],if \ nums[i-1,i+1]>26 \ or \ nums[i+1]=='0' \ or \ num[i]=='0'

dp[i+1]=df[i]+dp[i1], if other casesdp[i+1]=df[i]+dp[i-1], \ if \ other \ cases

然后在注意下特殊情况,即100这种特殊的就行了,初始条件注意下就没问题了,代码如下:

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 解码
# @param nums string字符串 数字串
# @return int整型
#
class Solution:
    def solve(self , nums: str) -> int:
        # write code here
        # 将nums中的不是1-9的字符全部删除
        # 初始化list存储dp
        if nums=='0':
            return 0
        leng = len(nums)
        if leng == 0:
            return 0
        dp = [1]*leng
        if leng == 1:
            return 1
        if int(nums[0:2])>26 or int(nums[0:2])==10:
            dp[1] = 1
        else:
            dp[1] = 2
        if leng == 2:
            return dp[1]
        if int(nums)%10 == 0:
            return 0
        else:
            for i in range(2 , leng):
                if int(nums[i-1:i+1])>26 or nums[i] == '0' or nums[i-1]=='0':
                    dp[i] = dp[i-1]
                else:
                    dp[i] = dp[i-1]+dp[i-2]
        return dp[-1]

nums = "31717126241541717"
print(Solution().solve(nums))
全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务