前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、把数字翻译成字符串

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。

请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

1.1、解题思路

有一点像打家劫舍。比如,当前位置为i,我们需要判断i-1i能否构成->大于等于10,小于等于25的数字。如果能构成,则肯定是f(i-2)+f(i-1)中翻译方法,因此我讲pre设置为i-2,的值,post设置为i-1的值,last位置为i的值

最终得出如下解法

1.2、算法

   public int translateNum(int num) {
        String string = String.valueOf(num);
        // i = 0 的时候,不用判断,最大last肯定为 1 。移动i = 2的时候,还会为1。这样就移动3次了
        int pre = 0, post = 1, last = 1;
        for (int i = 1; i < string.length(); ++i) {
            pre = post;
            post = last;

            //截取 上一个字符串和当前字符串
            String str = string.substring(i - 1, i + 1);
            Integer value = Integer.valueOf(str);
            if (value <= 25 && value >= 10) {
                last = post + pre;
            }
        }
        return last;
    }

1.3、测试

  @Test
    public void test() {
        System.out.println(translateNum(125214));
    }

ContactAuthor