把数字翻译成字符串

这几天做了一些关于数字的题,数字组合最小,数字翻译成字符串,数字的二进制运算。下面是其中一道:

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

这道题也不说多难吧,就比较典型,既可以用递归也可以使用动态规划,
看题解:
0-25之内的数字都有对应的字母,这个区间内的数字,都可以进行重组。
大于25或者小于10的数字都只有一种组合。
对于所有的数字,让它模上100,和10比较或者25比较,比10小,就返回1。
比25大,就继续递归;
在以上区间,就返回除以10+除以100的结果;

动态规划和递归思想其实差不太多,就是写法不太一样。

  1. 递归解法
public static int translateNum(int num) {
        if(num<10){
            return 1;
        }

        int res = num%100;

        if(res<10||res>=26){
            return translateNum(num/10);

        }else{
            return translateNum(num/10)+translateNum(num/100);
        }
    }

  1. 动态规划解法
public static int translateNumWithDp(int num) {

        String s = String.valueOf(num);
        int[] dp = new int[s.length()+1];

        dp[0] = dp[1] = 1;


        for (int i=2;i<=s.length();i++){
            String str = s.substring(i-2,i);

            if (Integer.parseInt(str)>9&&Integer.parseInt(str)<26){

                dp[i] = dp[i-1]+dp[i-2];

            }else {

                dp[i] = dp[i-1];

            }
        }
        return dp[s.length()];

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值