Offer[46] 把数字翻译成字符串
Posted haoworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Offer[46] 把数字翻译成字符串相关的知识,希望对你有一定的参考价值。
题目描述
给定一个数字,我们按照如下规则把它翻译为字符串: 0翻译成“a”,1翻译成“b”,..... 11翻译成“1”,...... 25翻译成“z”。一个数字可能有多个翻译。例如,12258有5种不同的翻译,分别是“bccfi”“bwfi”、“bczi”、“mcfi”和“mzi”。 请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
[牛客网刷题地址]无
思路分析
- 我们定义函数
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。 - 递归从最大的问题开始自上而下解决问题。我们也可以从最小的子问题开始自下而上解决问题,这样就可以消除重复的子问题。
测试用例
- 功能测试:只有一位数字;包含多位数字。
- 特殊输入测试:负数; 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[46] 把数字翻译成字符串的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 46. 把数字翻译成字符串
[LeetCode]剑指 Offer 46. 把数字翻译成字符串