面试题四十六:把数字翻译成字符串

 

0变a ,1变b,25变z 。即一个字符串可以变成多种形式,请计算一共有多少种
方法一:递归分解

 int TranFrom1(int n) {
                 if(n<0) return 0;
                 if(n/10==0) return 1;  
                 int k=0;
                 k+=TranFrom1(n/10);
                 if(n%100<=25&&n%100>=10) {
                      k+=TranFrom1(n/100);
                 }        
                 return k;
             }

方法二:动态规划,自下而上

int GetTranslationCount(int num)

     {    
         if(num < 0)
              return 0;
         String number = Integer.toString(num);
         int length = number.length();
         int[] counts = new int[length];
         int count = 0;
         for(int i = length - 1; i >= 0; --i)
         {
           count = 0;
             if(i < length - 1)//非最后
                 count = counts[i + 1];  //当前位置可以走一位数
             else
                 count = 1;
             if(i < length - 1)//非最后一位
             {
                 int digit1 = number.charAt(i) - '0';
                 int digit2 = number.charAt(i+1) - '0';
                 int converted = digit1 * 10 + digit2;
                 if(converted >= 10 && converted <= 25) //判断能否走两位数
                 {
                     if(i < length - 2)
                         count += counts[i + 2];
                     else
                         count += 1;
                 }
             }
             counts[i] = count;  //记录当前可能的和
         }
         count = counts[0];
         return count;
     }

 

posted @ 2020-03-29 16:40  浪波激泥  阅读(296)  评论(0编辑  收藏  举报