• 【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

  • 相关阅读:
    python读写excel利器:xlwings 从入门到精通
    认识--类 ( Class ) 面向对象技术
    python 平均值/MAX/MIN值 计算从入门到精通
    python读写word文档 -- python-docx从入门到精通
    【模板】KMP算法
    【模板】主席树
    C语言第一次博客作业
    C语言--第0次作业
    Chapter5:语句
    Chapter4:表达式
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer46-ba-shu-zi-fan-yi-cheng-zi-fu-chuan.html
Copyright © 2020-2023  润新知