Loading

剑指Offer46.把数字翻译成字符串

题目链接:把数字翻译成字符串

思路:从数字高位向低位进行遍历,假设遍历到第i个位置,那么开始判读可不可以和前面的数字进行组合:当不和前面的数字组合时,该位数字自己表示一个字符;当和前面数字组合时,先判断能不能组合,如01、31、26、40,这些只有一种翻译方式,也就是说只有和前面组合时位于[10,25]这个范围内才能进行翻译。所以有,当不能组合时\(dp[i] = dp[i-1]\),当可以组合时\(dp[i]=dp[i-1]+dp[i-2]\)。可以看到结果只用到两个变量,所以不需要使用数组。

代码:

class Solution {
    public int translateNum(int num) {
        char[] n = String.valueOf(num).toCharArray();
        int res = 1;
        for(int i=1, pre1=1, pre2=1; i<n.length; i++){
            if(n[i-1]=='0' || n[i-1]>'2' || 
            n[i-1]=='2' && n[i]>'5' || 
            n[i] == '0' && n[i-1]!='1' && n[i-1]!='2'){
                res = pre1;
            }else{
                res = pre1 + pre2;
            }
            pre2 = pre1;
            pre1 = res;
        }
        return res;
    }
}

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35 MB, 在所有 Java 提交中击败了93.79%的用户

posted @ 2020-12-29 11:11  yoyuLiu  阅读(63)  评论(0编辑  收藏  举报