【剑指offer】面试题46. 把数字翻译成字符串(java)
給定一個數字,我們按照如下規則把它翻譯為字符串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。
?
示例 1:
輸入: 12258
 輸出: 5
 解釋: 12258有5種不同的翻譯,分別是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
 ?
提示:
0 <= num < 231
代碼:
class?Solution?{
????public?int?translateNum(int?num)?{
??????????if(num<0)
???????????{
???????????????return?0;
???????????}
???????????if(num<10)
???????????{
???????????????return?1;
???????????}
???????????int?n=num,k=0;
???????????while(n!=0)
???????????{
???????????????k++;
???????????????n/=10;
???????????}
???????????k--;
???????????int?dp[]?=?new?int[k+1];
???????????dp[0]=1;?
???????????StringBuilder?sb?=?new?StringBuilder();
???????????for(int?i=k;i>=0;i--)
???????????{
???????????????int?x?=?(int)((num/Math.pow(10,i))%10);
?????????????//??System.out.println(x);
???????????????sb.append(x);
???????????}
???????????//System.out.println(k+"?"+sb);
???????????if(k>=1)
???????????{
???????????????if(sb.charAt(0)=='1'||(sb.charAt(0)=='2'&&sb.charAt(1)<'6'))
???????????????dp[1]=2;
???????????????else
??????????????????dp[1]=1;
???????????}
???????????else
???????????{
???????????????dp[1]?=?1;
???????????}
???????????for(int?i=2;i<=k;i++)
???????????{
???????????????if(i>1)
???????????????{
???????????????????if(sb.charAt(i-1)=='0'||sb.charAt(i-1)>'2')
???????????????????{
???????????????????????dp[i]?=?dp[i-1];
???????????????????}
???????????????????else?if(sb.charAt(i-1)=='2'&&sb.charAt(i)>='6')
???????????????????{
???????????????????????dp[i]?=?dp[i-1];
???????????????????}
???????????????????else
???????????????????{
???????????????????????dp[i]?=?dp[i-2]+dp[i-1];
???????????????????}
???????????????}
???????????}
???????????return?dp[k];
????}
}
總結
以上是生活随笔為你收集整理的【剑指offer】面试题46. 把数字翻译成字符串(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Juventas, the Roman
- 下一篇: Java四种引用
