算法 - 剑指Offer 把数字翻译成字符串

题目

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

解题思路

这题目需要一定逻辑归纳能力, 我们从最简单的数字归纳, 当只有2位数的时候, 只有当前数字小于等于25并且大于10的时候才会返回2,不然别的数据就是都返回1, 那么如果3位数的时候, 我们就会发现, 前两个的条件还是一样的, 当移位到第三位的时候, 我们可以发现当第二位和第三位组合是小于等于25并且大于10的时候, 我们是2+1=3, 其他情况下我们还是2,当出现第四位的时候, 我们可以发现最后两位如果小于等于25并且大于10的时候, 我们最后结果是3+2=5, 所以归纳得出 当从第二位开始只取2位数的时候小于等于25并且大于10的时候, 我们的结果是前前一个总和+前一个总和, 当其他情况的时候, 总和情况不变,所以我们如下实现代码即可。

Java代码实现

public class TranslateNum {
    public int translateNum(int num) {
        int preRes = 1;
        int curRes = 1;
        int res = 1;
        char[] strs = String.valueOf(num).toCharArray();
        char pre = strs[0];
        int ten = 10;
        for (int i = 1; i < strs.length; i++) {
            int newNum = Integer.parseInt(String.valueOf(pre)) * ten  +Integer.parseInt(String.valueOf(strs[i]));
            if(newNum <= 25 && newNum >= 10){
                res = preRes + curRes ;
            }
            preRes = curRes;
            curRes = res;
            pre = strs[i];
        }
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值