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

把数字翻译成字符串

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

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 解码
 * @param nums string字符串 数字串
 * @return int整型
*/
func solve( nums string ) int {
    // 有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果 数据范围:字符串长度满足 
    // dp[i] 到字符串的第'i'个字符为止,总共有多少种解码方式
    // 注意 0 不能独立解码
    // 从 1 ~ 9,仅有1种解码方式
    // '0' 不能独立解码,因此如果字符的前一个字符是'0',10、20 …… 说明 dp[i] = dp[i-2]
    // '10' ~ '26' 即 '10' <= s[i-1][i] <= '26', 则dp[i] += dp[i-2]
    // != 0 表示克独立进行解码 dp[i] += dp[i-1]
    // dp[0] = 1
    // dp[1] 输入第一个字符是'0' 则 为 否则 '1'
    // 边界情况 如果字符串以'0'开头,则无法通过解码,直接返回'0'
    if nums[0] == '0' {
        return 0
    }

    n := len(nums)
    dp := make([]int, n+1)
    dp[0],dp[1] = 1, 1

    for i := 2; i <= n;i++ {
        if nums[i-1] != '0' {
            dp[i] += dp[i-1]
        }
        twoDigit := (nums[i-2]-'0')*10 + (nums[i-1] - '0')
        if twoDigit >= 10 && twoDigit <= 26 {
            dp[i] += dp[i-2]
        }
    }
    
    return dp[n]
}













全部评论

相关推荐

投递中移(苏州)软件技术有限公司等公司6个岗位 > 牛客解忧铺
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务