Offer[46] 把数字翻译成字符串

Posted haoworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Offer[46] 把数字翻译成字符串相关的知识,希望对你有一定的参考价值。

题目描述

  给定一个数字,我们按照如下规则把它翻译为字符串: 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] 把数字翻译成字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer面试题46. 把数字翻译成字符串

[LeetCode]剑指 Offer 46. 把数字翻译成字符串

[LeetCode]剑指 Offer 46. 把数字翻译成字符串

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

剑指 Offer 46. 把数字翻译成字符串(动态规划,Java)

剑指 Offer 46. 把数字翻译成字符串(动态规划,Java)