BM69 #把数字翻译成字符串# 动态规划 + 逆序遍历(简单易懂!)

import java.util.*;
public class Solution {
    public int solve (String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int n = s.length();
        int[] dp = new int[n + 1];
        dp[n] = 1; // 当字符串为空时,有一种解码方式
        dp[n - 1] = s.charAt(n - 1) != '0' ? 1 : 0; // 最后一个数字如果不是0,则有一种解码方式
        // 逆序遍历,便于处理前导0
        for (int i = n - 2; i >= 0; i--) {
            if (s.charAt(i) == '0') continue; // 当前数字如果为0,则跳过,因为0不能单独解码
            int num = Integer.parseInt(s.substring(i, i + 2)); // 检查两位数的可能性
            if (num <= 26) {
                dp[i] = dp[i + 1] + dp[i + 2]; // 如果两位数合法,则当前解码数为后两位的解码数之和
            } else {
                dp[i] = dp[i + 1]; // 否则,只考虑一位数的情况
            }
        }
        return dp[0];
    }
}


#动态规划#
全部评论

相关推荐

10-17 23:18
已编辑
西北农林科技大学 Web前端
独行m:给25可以试试,但他只能给12,那就是纯纯的事精
秋招,不懂就问
点赞 评论 收藏
分享
赛博小保安:你这简历没啥大问题的,经历技能也足够了,问题应该就是出在出身了,学院本就是这样,HR忙着跟92的勾搭呢,哪有心思看我们这些双非😿😭
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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