剑指offer_将数字 转换成字符串

//把数字转化成字符串
/*
* 思路:以12258为例,如果从左往右递归,会造成重复计算子问题,我们从右往左计算,创建一个辅助数组,数组的值保存的是
* 从当前下标的元素到数组末尾元素这一段子字符串有多少种翻译方法,数组的第i个元素值与数组的第i+1个值和第i+2个值有关
* f(i)=f(i+1)+g(i,i+1)*f(i+2),其中g(i,i+1)的值和字符串中第i和第i+1个元素组合是否处于[10,25]区间内有关
* 若在区间内,则f(i)=f(i+1)+f(i+2),否则f(i)=f(i+1)
* */
 1 public static int getTranslationCounts(String str){
 2     int len=str.length();
 3     //创建一个辅助数组
 4     int [] counts=new int [len];
 5     int index=len-1;
 6     while(index>=0){
 7         if (index==len-1) counts[index]=1;
 8         else {
 9             //判断当前字符串的元素和后一个元素拼接起来是否在区间内
10             Character ch1=str.charAt(index);
11             Character ch2=str.charAt(index+1);
12             int digit1=Integer.valueOf(ch1.toString());
13             int digit2=Integer.valueOf(ch2.toString());
14             if (digit1*10+digit2>=10&&digit1*10+digit2<=25){
15                 if (index==len-2){
16                     counts[index]=counts[index+1]+1;
17                 }else {
18                     counts[index]=counts[index+1]+counts[index+2];
19                 }
20             }else {
21                 counts[index] = counts[index + 1];
22             }
23         }
24         index--;
25     }
26        return counts[0];
27 }

 

转载于:https://www.cnblogs.com/ChenXionghfut/p/8442173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值