【迭代+动态规划】把数字翻译成字符串

求解代码

java 复制代码
    public int solve(String nums) {
        
        if (nums == null || nums.length() == 0 || nums.charAt(0) == '0') {
            return 0;
        }

        int n = nums.length();
        
        int prevPrev = 1; 
        int prev = 1;

        for (int i = 2; i <= n; i++) {
            int curr = 0;
            char currChar = nums.charAt(i - 1);
            char prevChar = nums.charAt(i - 2);

            
            if (currChar != '0') {
                curr += prev;
            }

            
            int twoDigit = Integer.parseInt(nums.substring(i - 2, i));
            if (twoDigit >= 10 && twoDigit <= 26) {
                curr += prevPrev;
            }

            
            prevPrev = prev;
            prev = curr;
        }

        return prev;
    }

小贴士

变量 对应传统DP数组 通俗含义
prevPrev dp[i-2] 前i-2个字符的解码方式数
prev dp[i-1] 前i-1个字符的解码方式数
curr dp[i] 临时变量,存储「前i个字符」的解码方式数

int prevPrev = 1 对应dp[0]=1,也就是空字符串的解码方式数,没有实际解码意义,只为让组合解码的计算成立(类似于乘法中的 "1")

相关推荐
企业数字化笔记7 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!7 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君65810 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧10 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
Shimeri11 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J11 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang11 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖11 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy11 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
上班摸鱼下班游戏11 小时前
Unity 仿生智能算法 从蚁群算法 开始
算法·unity·游戏引擎