• 剑指 Offer 46. 把数字翻译成字符串


    一、题目描述

    给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

    示例 1:

    输入: 12258
    输出: 5
    解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
     

    提示:

    0 <= num < 231

    二、题目难度:中等

    三、题解

    方法一:动态规划

    class Solution {
        public int translateNum(int num) {
            String numStr = String.valueOf(num);
            int n = numStr.length();
            if(n==1) return 1;
            char[] numChar = numStr.toCharArray();
            int[] dp = new int[n];
            dp[0] = 1;
            dp[1] = (numChar[0]>'2'||numChar[0]=='2'&&numChar[1]>'5')?1:2;
            for(int i=2;i<n;i++){
                if(numChar[i-1]=='0'||numChar[i-1]>'2'||numChar[i-1]=='2'&&numChar[i]>'5')
                    dp[i] = dp[i-1];
                else
                    dp[i] = dp[i-1] + dp[i-2];
                //System.out.println(dp[i]);
            }
            return dp[n-1];
        }
    }

     优化:

    class Solution {
    public:
        int translateNum(int num) {
            string numStr = to_string(num);
            int n = numStr.length();
            int l = 0;
            int t = 0;
            int r = 1;
            for(int i=0;i<n;i++){
                l = t;
                t = r;
                
                r = t;
                if(i==0) 
                    continue;
                
                auto pre = numStr.substr(i-1,2);
                if(pre<="25"&&pre>="10")
                    r += l;
            }
            return r;
        }
    };

  • 相关阅读:
    ORM版,学生信息管理单表查询..
    回顾
    连接不上数据库
    CI缓存文件的处理和显示 研究
    php的两个符号@和&---php总会要知道的系列
    form 表单
    CI 目录下放置index.html,防止直接访问
    程序员必须知道的10大基础实用算法及其讲解
    memached 服务器lru算法
    centos 5.5 安装 lnmp
  • 原文地址:https://www.cnblogs.com/ttzz/p/14488382.html
Copyright © 2020-2023  润新知