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

把数字翻译成字符串

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))
全部评论

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务