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

Posted Spring-_-Bear

tags:

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

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

示例 1:

输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”

提示:

  • 0 <= num < 231

题解:

递推公式:


动态规划解析:记数字 num 第 i 位数字为 xi,数字 num 的位数为 n。例如: num = 12258 时 n = 5, x1 = 1

  • 设动态规划列表 dp,dp[i] 代表以 xi 结尾的数字的翻译方案数量
  • 转移方程: 若 xi 和 xi-1 组成的两位数字可以被翻译,则 dp[i] = dp[i−1] + dp[i−2],否则 dp[i] = dp[i-1]
    • 可被翻译的两位数区间为 [10, 25]
  • 初始状态: dp[0] = dp[1] = 1,即 “无数字” 和 “第 1 位数字” 的翻译方法数量均为 1
  • 返回值: dp[n],即此数字的翻译方案数量
	/**
     * 剑指 Offer 46. 把数字翻译成字符串
     */
    public int translateNum(int num) 
        String s = String.valueOf(num);
        int sum = 1;
        int pre = 1;

        for (int i = 2; i <= s.length(); i++) 
            String tmp = s.substring(i - 2, i);
            // 若 xi 和 xi-1 组成的两位数字可以被翻译,则 dp[i] = dp[i−1] + dp[i−2],否则 dp[i] = dp[i-1]
            int cur = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? sum + pre : sum;
            pre = sum;
            sum = cur;
        

        return sum;
    
	/**
     * 剑指 Offer 46. 把数字翻译成字符串
     */
    public int translateNum(int num) 
        int sum = 1;
        int pre = 1;
        int x;
        int y = num % 10;

        while(num != 0) 
            num /= 10;
            x = num % 10;
            int digit = 10 * x + y;
            int cur = (digit >= 10 && digit <= 25) ? sum + pre : sum;
            pre = sum;
            sum = cur;
            y = x;
        
        return sum;
    

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof

以上是关于[LeetCode]剑指 Offer 46. 把数字翻译成字符串的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1442. 形成两个异或相等数组的三元组数目 / 剑指 Offer 46. 把数字翻译成字符串 / 剑指 Offer 47. 礼物的最大价值

LeetCode剑指offer46把数字翻译成字符串(动态规划)

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

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

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

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