难度:中等
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是”bccfi”, “bwfi”, “bczi”, “mcfi”和”mzi”
提示:
0 <= num < 231
方法一:截取字符比较法(从左到右循环)
/**
* @param {number} num
* @return {number}
*/
var translateNum = function(num) {
let a = 1;
let b = 1;
let s = String(num)
for(let i = 2;i<=s.length;i++){
let tmp = s.substring(i-2,i)
let c = (tmp.localeCompare('10')>0||tmp.localeCompare('10')==0)&&(tmp.localeCompare('25')<0||tmp.localeCompare('25')==0)?a+b:b
a = b
b = c
}
return b
};
方法二:截取数字比较法(除余的方法截取数字,从右到左循环)
/**
* @param {number} num
* @return {number}
*/
var translateNum = function(num) {
let a = 1;
let b = 1;
let x = num%10;
let y = num%10;
while(num!=0){
num = parseInt(num/10)
x = num%10
let tmp = x*10+y
let c = 0
if(tmp>=10&&tmp<=25){
c=a+b
}else{
c = a
}
b = a;
a = c;
y = x;
}
return a;
};
tips: