剑指Offer_46 把数字翻译成字符串
2018-03-06 10:31
585 查看
package 剑指Offer; public class LeetCode46_把数字翻译成字符串 { public static void main(String[] args) { //给定一个数字,我们按照如下规则把它翻译成字符串:0->a 1->b ... 25->z。问一个数字可能有多少种翻译? int n=12258; System.out.println(getTranslationCount(n)); } //功能函数部分 public static int getTranslationCount(int n){ //思路:例如给定12258为例 我们有两种不同的选择来翻译第一个数字1,。第一种选择是数字1单独翻译成b 或者和第2个数字一起翻译,如果两者合并>=10&&<=25的话 //剩下的就是对后面的进行递归 //我们使用f(i)来表示第i位数字开始的不同翻译的数目。f(i)=f(i+1)+g(i,i+1)*f(i+2)。当两者合并满足翻译条件时 g(i,i+1)=1,否则为0 if(n<0) return 0; String ns=String.valueOf(n); return translation(ns); } public static int translation(String ns){ int len=ns.length(); int [] sum=new int[ns.length()]; int count=0; //从后往前递归查找 for(int i=ns.length()-1;i>=0;i--){ //如果当前处理的不是最后一位 count=0; if(i<ns.length()-1){ count=sum[i+1]; }else{ //最后一个 count=1; } //两位数可以合并 if(i<ns.length()-1){ //合并 int first=ns.charAt(i)-'0'; int second=ns.charAt(i+1)-'0'; int combine=first*10+second; //判断合并后的数字 if(combine>=10&&combine<=25){ if(i<ns.length()-2){ //位于倒数第二位左边 count+=sum[i+2]; }else{ count+=1; } } } sum[i]=count; } return sum[0]; } }
相关文章推荐
- 剑指Offer-46:把数字翻译成字符串
- 剑指Offer面试题:35.将字符串转换为数字
- 剑指offer面试题54 表示数字的字符串(java实现)
- 剑指Offer面试题45圆圈中最后剩下的数字(约瑟夫环问题),面试题46求1+2+...+n
- 剑指offer-将字符串转化为数字
- 剑指offer_表示数字的字符串
- 剑指Offer面试题41和为s的两个数字与和为s的连续正数序列,面试题42翻转单词顺序与左旋转字符串
- 剑指offer——字符串转数字(奥妙各种)(没有考虑科学计数法的情况)(好题)
- 剑指offer——字符串转数字
- 剑指offer-字符串转化为数字
- 剑指offer(46)-把字符串转换成整数
- 剑指offer:把字符串转换成数字
- 剑指offer之字符串转换为数字
- 剑指Offer(第二版)面试题46:把数字翻译成字符串
- 剑指offer 编程题(42):左旋转字符串
- [剑指Offer]40.数组中只出现一次的数字
- 剑指offer——旋转数组的最小数字
- 只出现一次的数字(剑指offer40)
- 【剑指offer】2.3.2 字符串——面试题4:替换空格
- 剑指offer 字符串的排列