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

  • 题目描述
  • 思路分析
  • 测试用例
  • Java代码
  • 代码链接

题目描述

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

原文地址:https://www.cnblogs.com/haoworld/p/offer46-ba-shu-zi-fan-yi-cheng-zi-fu-chuan.html

时间: 2024-10-07 18:10:14

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

剑指offer:把数字翻译成字符串

题目要求:给定一个数字,按照如下规则翻译成字符串:0翻译成"a",1翻译成"b"...25翻译成"z".一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi.实现一个函数,用来计算一个数字有多少种不同的翻译方法. # -*- coding: utf-8 -*- # @Time : 2019-07-10 21:13 # @Author : Jayce Wong # @ProjectName : j

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

题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi.实现一个函数,用来计算一个数字有多少种不同的翻译方法. 解题思路: 下面我们从自上而下和自下而上两种角度分析这道题目,以12258为例: 自上而下,从最大的问题开始,递归 : 有很多子问题被多次计算,比如258被翻译成几种这个子问题就被计算了两次. 自然想到可以用动态规划来解决,用f(i

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

链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/submissions/ 代码 class Solution { public: int translateNum(int num) { int n = 0; string s = ""; while (num) { s += to_string(num % 10); num /= 10; n++; } reverse(s.begin(

剑指Offer对答如流系列 - 把数字翻译成字符串

面试题46:把数字翻译成字符串 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻译成"b",--,11翻译成"l",--,25翻译成"z".一个数字可能有多个翻译.例如12258有5种不同的翻译,它们分别"bccfi", "bwfi", "bczi", "mcfi" 和"mzi" .请编程实现一个函

《剑指offer》第四十六题:把数字翻译成字符串

// 面试题46:把数字翻译成字符串 // 题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻 // 译成"b",……,11翻译成"l",……,25翻译成"z".一个数字可能有多个翻译.例 // 如12258有5种不同的翻译,它们分别是"bccfi"."bwfi"."bczi"."mcfi"和 // "mzi&qu

新增3 把数字翻译为字符串

题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成"a",1翻译成"b"-25翻译成"z".一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi.实现一个函数,用来计算一个数字有多少种不同的翻译方法. 思路:递归,遍历数字的位,当前位翻译一种方法,如果当前位和下一位能结合成另一种翻译,则有可记录为一种方法.但是递归会找出重复计算,如12258会计算1,2258和12,258,而2258

java 数字转换成字符串

一.各种数字类型转换成字符串型:  public static void main(String[] args) { double value = 123456.123; String str = String.valueOf(value); // 其中 value 为任意一种数字类型. System.out.println("字符串str 的值: " + str); //字符串str 的值: 123456.123 } 二.字符串型转换成各种数字类型: public static vo

java 数字转换成字符串与数字转换成字符串

各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float

js字符串转换成数字,数字转换成字符串

js字符串转换成数字   将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt('123') : 返回 123(int): parseInt('1234xxx') : 返回 1234(int): 如果解析不到数字,则将返回一个NaN的值,可以用isNaN()函数来检测: 举例 : var i = parseInt('abc'); if (isNaN(i)) { alert('NaN value