题目描述

  给定一个数字,我们按照如下规则把它翻译为字符串: 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

最新文章

  1. JQuery+Ajax制作省市联动
  2. C# socket 实现消息中心向消息平台 转发消息
  3. python字符串相关的函数
  4. BZOJ 3831
  5. Linux入门2
  6. mysql学习笔记2
  7. bzoj1004 Cards
  8. spring security 1
  9. html 一般标签 常用标签 表格
  10. Struts简介、原理及简单实现
  11. 在脚本中使用source命令不生效
  12. PowerApp Document
  13. LeetCode题解39.Combination Sum
  14. Class.isAssignableFrom与instanceof的区别
  15. Dubbo服务降级
  16. python学习day9 字符编码和文件处理
  17. for循环-鼠标移入事件
  18. java thread dump日志分析
  19. wikioi 1028 花店橱窗布置 最大权匹配
  20. 基于jwt的token验证

热门文章

  1. ThreadLocal为什么会内存泄漏
  2. ThreadLocal线程隔离
  3. python开发基础--思维导图
  4. vscode c 语言 win10
  5. String——字符串
  6. GitHub项目:jkrasnay/sqlbuilder的使用
  7. 实验:keepalived双主抢占模式和非抢占模式和IPVS
  8. STL 队列
  9. java优雅注释原则和代码格式列举
  10. cookie、session和application都是些什么神?——图文加案例,不怕你不会,就怕你不看