题目描述

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

[牛客网刷题地址]无

思路分析

  1. 我们定义函数f(i)表示从第i位数字开始的不同翻译的数目,那么f(i)=(i+1)+g(i,i+1)*f(i+2)。当第i位和第i+1位两位数字拼接起来的数字在10~ 25的范围内时,函数g(i,i+1)的值为1;否则为0。
  2. 递归从最大的问题开始自上而下解决问题。我们也可以从最小的子问题开始自下而上解决问题,这样就可以消除重复的子问题。

测试用例

  1. 功能测试:只有一位数字;包含多位数字。
  2. 特殊输入测试:负数; 0;包含25、26的数字。

Java代码

public class Offer046 {
public static void main(String[] args) {
test1();
test2();
test3(); } public static int GetTranslationCount(int number) {
return Solution1(number);
} private static int Solution1(int number) {
if(number<0) {
return 0;
}
String strNum = String.valueOf(number);
int length = strNum.length();
int[] count = new int[length];
for(int i=length-1;i>=0;i--) {
if(i==length-1) {
count[i] = 1;
}else {
count[i] = count[i+1];
int a=strNum.charAt(i)-'0';
int b=strNum.charAt(i+1)-'0';
int convertNum = a*10+b;
if(convertNum>=10 && convertNum<=25) {
if(i==length-2) {
count[i]+=1;
}else {
count[i]+=count[i+2];
}
}
}
}
return count[0];
} private static void test1() {
int count = GetTranslationCount(12258);
System.out.println(count);
} private static void test2() {
System.out.println(GetTranslationCount(0));
}
private static void test3() {
System.out.println(GetTranslationCount(2526));
} }

代码链接

剑指Offer代码-Java

【Offer】[46] 【把数字翻译成字符串】的更多相关文章

  1. 剑指 Offer 46. 把数字翻译成字符串 + 动态规划

    剑指 Offer 46. 把数字翻译成字符串 Offer_46 题目描述 题解分析 本题的解题思路是使用动态规划,首先得出递推公式如下 dp[i] = dp[i-1]+dp[i-2](如果s[i-1] ...

  2. 力扣 - 剑指 Offer 46. 把数字翻译成字符串

    题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字 ...

  3. 【Java】 剑指offer(46) 把数字翻译成字符串

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成" ...

  4. 每日一题 - 剑指 Offer 46. 把数字翻译成字符串

    题目信息 时间: 2019-07-02 题目链接:Leetcode tag: 动态规划 难易程度:中等 题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ...

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

    题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...

  6. 剑指offer——48把数字翻译成字符串

    题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcf ...

  7. 《剑指offer》面试题46. 把数字翻译成字符串

    问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...

  8. 《剑指offer》第四十六题(把数字翻译成字符串)

    // 面试题46:把数字翻译成字符串 // 题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻 // 译成"b",……,11翻译成&qu ...

  9. JZ-071-把数字翻译成字符串

    把数字翻译成字符串 题目描述 给定一个数字,按照如下规则翻译成字符串:1 翻译成"a",2 翻译成"b"... 26 翻译成"z".一个数字 ...

  10. 把数字翻译成字符串 --剑指offer 46题

    # 给一个字符串,按如下规则把它翻译成字符串:1翻译成a,2翻译成b,...25翻译成z:一个数可以有多种翻译方式,比如122可以翻译成abb和kb还可以翻译成aw即3种翻译方式.计算一个数字有几种翻 ...

随机推荐

  1. Activiti6系列(1)- 核心数据库表及字段注释说明

    前言 本文是根据<疯狂工作流讲义-Activiti6.0>一书中提取过来的,有兴趣的可以去当当网买这本书,讲的很不错,最后还有实战案例. 虽然是提取过来的,但完全靠手打梳理,觉得有用的小伙 ...

  2. hadoop hdfs 分布式存储

    1.克隆前的工作 1.配置好网络nat  需要设置静态ip并能通过主机上网 ssh   和  rsync  是必须下载的 2.yum install vim wget  rsync  ssh   并配 ...

  3. DT-06 For MQTT

    感谢关注深圳四博智联科技有限公司产品!我公司提供完整的WiFi信号强度采集方案,包括WiFi信号采集.设备远程管理平台.智能终端应用等. Doit_MQTT透传固件基于乐鑫ESP_IOT_SDK使用C ...

  4. laravel新项目报错 No application encryption key has been specified.

    解决办法, 若文件根目录下没有 .env 1..env.example 改名使用命令 copy 修改为 .env 2.使用命令 php artisan key:generate  获取密码,自动保存到 ...

  5. JavaWeb零基础入门-01 基础概念说明

    一.序言 从学校出来到实习,发现学校学的东西太过基础,难于直接运用于工作中.而且工作中,现在都以web开发为主,学校开了web开发相关课程.自己学的不够深入,所以本人自学JavaWeb开发,介于学习巩 ...

  6. 从MYSQL的ibtmp1文件太大说起

    1.  啥情况呀 测试环境机器磁盘空间不足的告警打破了下午的沉寂,一群人开始忙活着删数据.但是,不久前刚清理了一波数据,测试环境在没做压测的情况下不至于短短一个月不到就涨了200G数据,于是,我悄悄的 ...

  7. 洛谷 P3648 [APIO2014]序列分割

    题意简述 有一个长度为n的序列,分成k + 1非空的块, 选择两个相邻元素把这个块从中间分开,得到两个非空的块. 每次操作后你将获得那两个新产生的块的元素和的乘积的分数.求总得分最大值. 题解思路 f ...

  8. Fabric项目学习总结

    1.Hyperledger Fabric的基本架构 2.PKI机制

  9. 100天搞定机器学习|Day 30-32 微积分的本质

    3blue1brown系列课程,精美的动画,配上生动的讲解,非常适合帮助建立数学的形象思维,非常值得反复观看: http://www.3blue1brown.com/ 哔哩哔哩: https://sp ...

  10. C/C++ 数据类型

    C/C++ 数据类型 C语言包含5个基本数据类型: void, integer, float, double, 和 char. 类型 描述 字节数 取值范围 void 空类型 1 int 整型 4 - ...