剑指Offer46-把数字翻译成字符串
题目
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”
解法
class Solution {
public int translateNum(int num
) {
if(num
== 0) return 1;
int temp
= num
;
int n
= 0;
while(temp
>0){
temp
/= 10;
++n
;
}
int[] nums
= new int[n
];
for(int i
= n
- 1; i
>= 0 ; --i
){
nums
[i
] = num
% 10;
num
/= 10;
}
int[] dp
= new int[n
+1];
dp
[0] = 1;
dp
[1] = 1;
for(int i
= 2; i
<= n
; ++i
){
int a
= nums
[i
-2]*10+nums
[i
-1];
if(a
>=10&&a
<=25){
dp
[i
] = dp
[i
-2]+dp
[i
-1];
}else{
dp
[i
] = dp
[i
-1];
}
}
return dp
[n
];
}
}