题解 | #把数字翻译成字符串# 后缀和思路

把数字翻译成字符串

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

import java.util.*;


public class Solution {
    public int solve (String nums) {
        int n = nums.length();
        if (n == 0) return 0;
        if (n == 1) {
            if (nums.charAt(0) == '0')
                return 0;
            else
                return 1;
        }

        char[] chars = nums.toCharArray();

        // 初始化dp表
        int [] dp = new int[n];

        if (chars[n - 1] == '0') {
            dp[n - 1] = 0;
        } else {
            dp[n - 1] = 1;
        }

        if (chars[n - 2] == '0') {
            dp[n - 2] = 0;
        } else if (chars[n - 2] * 10 + chars[n - 1] - '1' * 11 + 11 <= 26 && chars[n - 2] * 10 + chars[n - 1] - '1' * 11 + 11 > 0) {
            dp[n - 2] = dp[n - 1] + 1;
        } else {
            dp[n - 2] = dp[n - 1];
        }

        // 遍历字符串
        for (int i = n - 3; i >= 0; --i) {
            if (chars[i] == '0') {
                // 说明有一种可能,和前一个组成一个字母
                dp[i] = 0;
            } else if (chars[i] * 10 + chars[i + 1] - '1' * 11 + 11 <= 26) {
                // 说明有两种可能,和前一个组成一个字母或自己是一个字母
                dp[i] = dp[i + 1] + dp[i + 2];
            } else {
                // 说明有一种可能,自己是一个字母
                dp[i] = dp[i + 1];
            }
        }
        return dp[0];
    }
}

#动态规划##后缀#
全部评论

相关推荐

牛客928043833号:在他心里你已经是他的员工了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务