小白教你把数字翻译成字符串

把数字翻译成字符串

题目描述:

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

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

示例1:

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

示例2:

输入:“31717126241541717”
返回:192
说明:192种可能的译码结果

题目链接:

把数字翻译成字符串

思路:

小白看到这个问题的时候并不知道如何下手,后来想到了dp,也就是动态规划。我们可不可以一个个增加字符,然后通过前面的组合数,推出以当前字符结束时的组合数。由此我们仔细考虑后会出现以下情况:
在这里插入图片描述

代码:

import java.util.*;


public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        // write code here
        if(nums.charAt(0) == '0') return 0;
        int [] dp = new int[nums.length()];//dp[i]的含义代表长度在i位置时有几种翻译办法
        dp[0] = 1;//在第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'){
                    if(i == 1) dp[i] = 1;//特判字符串长度为2
                    else dp[i] = dp[i-2];//因为 10 20 这样的只有一种对应方案,所以此时dp[i]取决于dp[i-2]
                }
            }else if(nums.charAt(i-1) == '1' || (nums.charAt(i-1) == '2' && nums.charAt(i) >= '1' && nums.charAt(i) <= '6')){
                /*11-26 抛去 20这样的组合
                但是当i==1的时候如 12 21 这样有两种方案
                当i>1时候dp[i] 取决于 dp[i-1] 和 dp[i-2]的和
                */
                if(i == 1) dp[i] = 2;
                else dp[i] = dp[i-1] + dp[i-2];

            }else{
                //>=27这样的组合
                dp[i] = dp[i-1];
            }    
        }return dp[nums.length() - 1];
    }
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是nefu小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值