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

把数字翻译成字符串

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        // write code here
        if (nums == null || nums.length() == 0 || nums.charAt(0) == '0') {
            return 0;
        }

        int n = nums.length();

        int[] dp = new int[n + 1];

        // 边界条件初始化
        dp[0] = 1; // 为后续的“两步跳”做铺垫
        dp[1] = 1; // 因为首位不是 '0'(前面已拦截),所以前1个字符必定有1种解法

        // 从第 2 个字符开始遍历
        for (int i = 2; i <= n; i++) {
            // 尝试走一步:取出当前单字符
            int singleDigit = nums.charAt(i - 1) - '0';
            if (singleDigit >= 1 && singleDigit <= 9) {
                dp[i] += dp[i - 1]; // 继承单步的方案数
            }

            // 尝试走两步:取出当前字符和前一个字符组成的两位数
            int doubleDigit = (nums.charAt(i - 2) - '0') * 10 + singleDigit;
            if (doubleDigit >= 10 && doubleDigit <= 26) {
                dp[i] += dp[i - 2]; // 叠加两步跳的方案数
            }
        }

        // 走到最后,返回前 n 个字符的方案数
        return dp[n];
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务