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

dp三步走:

1.状态定义

dp[i]表示到第i位能形成的方案数量(从1开始)

2.状态转移方程

当第i-1位,i位组合起来能被翻译:dp[i] = dp[i - 1] + dp[i - 2]

不能被连起来翻译:dp[i] = dp[i - 1]  //指加上了这一位,方案数量没有改变

3.边界处理

同注释

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

class Solution {
    public int translateNum(int num) {
        String s = String.valueOf(num);
        int[] dp = new int[s.length() + 1];
        //为什么dp[0]是1
        //因为当(这是个假如情况)第一、二位组成的数字>=10&&<=25
        //dp[2]=2,而dp[1]显然为1,推出dp[0]=1
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2; i <= s.length(); i++){
            String tmp = s.substring(i - 2, i);
            dp[i] = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? dp[i - 1] + dp[i - 2] : dp[i - 1];
        }
        return dp[s.length()];
    }
}

 

posted @ 2021-04-14 16:58  星予  阅读(32)  评论(0编辑  收藏  举报