把数字翻译成字符串

描述

有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。

现在给一串数字,返回有多少种可能的译码结果

输入:
"12"
返回值:
2
说明:
2种可能的译码结果(”ab” 或”l”)

 

public int solve(String nums) {
//排除0
if(nums.equals("0"))
return 0;
//排除只有一种可能的10 和 20
if(nums.equals("10") || nums.equals("20"))
return 1;
//当0的前面不是1或2时,无法译码,0种
for (int i = 1; i < nums.length(); i++) {
if (nums.charAt(i) == '0') {
if (nums.charAt(i - 1) != '1' && nums.charAt(i - 1) != '2') {
return 0;
}
}
}
int[] dp = new int[nums.length() + 1];
//辅助数组初始化为1
Arrays.fill(dp, 1);
for (int i = 2; i <= nums.length(); i++) {
//在11-19,21-26之间的情况,比如说字符串是269,可以把26打包一起,9单独处理。或者6单独打包,9单独处理,所以是dp[i - 1] + dp[i - 2]
if ((nums.charAt(i - 2) == '1' && nums.charAt(i - 1) > '0') || (nums.charAt(i - 2) == '2' && nums.charAt(i - 1) > '0' && nums.charAt(i - 1) < '7'))
dp[i] = dp[i - 1] + dp[i - 2];
else
dp[i] = dp[i - 1];
}
return dp[nums.length()];
}
posted @   MarkLeeBYR  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示