zoukankan      html  css  js  c++  java
  • 剑指 Offer 46. 把数字翻译成字符串 dp

    地址   https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/

    给定一个数字,我们按照如下规则把它翻译为字符串:
    0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。
    请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。   示例
    1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi""mzi"

    提示:
    0 <= num < 231

    解法

    题目中 每一位的数字是必须要翻译成某一个字母的。
    区别在于这一位的数字x是翻译成x对应的字母还是和前面的数字1结合成1x在翻译成对应的字母
    或者和前面的数字2结合成2x翻译成对应的字母。

    那么如果我们使用
    dp[i]表示第i位的数字可以有的翻译方法数目

    dp[i] = dp[i-1]
    或者dp[i] = dp[i-1]+dp[i-2]

    取决于i和i-1的数字能否结合成合法的对应的字母
    数字1和后面的数字(0~9)均可组合
    数字2和后面的数字(0~5)均可组合

    class Solution {
    public:
        int dp[100];
        int translateNum(int num) {
            string s = to_string(num);
            dp[0]=1;
            if(s.size()==1) return dp[s.size()-1];
            if(s[0]=='1')dp[1]=dp[0]+1;
            else if(s[0]== '2' && s[1]>='0' && s[1] <= '5') dp[1] = dp[0]+1;
            else{dp[1] =1;}
            
            for(int i = 2;i<s.size();i++){
                if(s[i-1] == '1') dp[i] =dp[i-1] + dp[i-2];
                else if(s[i-1] == '2' && s[i] >='0' && s[i] <= '5') { cout << 'x'<< endl; dp[i] = dp[i-1]+dp[i-2];}
                else dp[i] = dp[i-1];
            }
            
            return dp[s.size()-1];
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Eclipse下搭建Django环境
    在pycharm中启动Django服务器
    Window10安装Django,并创建第一个Django项目
    windows10安装tensorflow CPU版本
    service中显示一个dialog
    xp局域网共享访问没权限处理
    java线程调度
    Java优雅停机
    jit编译原理
    java final思考
  • 原文地址:https://www.cnblogs.com/itdef/p/14432201.html
Copyright © 2011-2022 走看看