剑指offer面试题46:把数字翻译成字符串

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

示例1:

输入:12258
输出:5
解释:12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 2^31

思路

假设12....−2的翻译方式为(−2)种
假设12....−2−1的翻译方式为(−1)种

可以得出12....−2−1的翻译方式

  1. −1可以组合翻译那就可以选择组合和不组合两种,组合就是(−2)种,不组合就是(−1)种,一共(−2)+(−1)种

  2. −1不可以组合翻译所以只有(−1)种

由上面可以得出状态转移方程:


image.png

dp[1]=1,至于dp[0]为什么等于1,举例:131,当读到3是和前面的1可以组合翻译应该是dp[2]= dp[2-1]+dp[2-2],可以看出来dp[2]明显是2;所以dp[0]=1.
注意:dp[1]才是以第一个字符结尾的翻译方案数而不是dp[0],dp[0]只是为了方程的一个值

代码
class Solution {
    public int translateNum(int num) {
    String str = num+"";
    String tmp="";
    int len = str.length();
    int []dp = new int[len+1];
    dp[0]=1;
    dp[1]=1;
    for(int i=2;i=0&&tmp.compareTo("25")<=0){
            dp[i]=dp[i-1]+dp[i-2]; 
       }else{
           dp[i]=dp[i-1];
       } 
       
    }
    return dp[len];
    }
}

参考:
把数字翻译成字符串

你可能感兴趣的:(剑指offer面试题46:把数字翻译成字符串)