代码实现
使用降低维度的思想,一个数字看成为字符串,然后去掉前面的两位数,或者一位数,当前面两位数组合是大于25的数,说明前面两个数字,要想翻译为英文就必须得分开考虑,于是就降了一个长度,进行递归处理,如果是在25以内的数字,则需要考虑两个情况,一个是分开和不分开,于是就是dp(str.slice(1)) + dp(str.slice(2)),但是这里有个特殊情况就是当str只是为两位数字时候,
dp(str.slice(2))有个单独的bug,于是需要作出单独的处理才行,代码实现如下所示
var translateNum = function (num) {
function dp(str) {
if(str.length <=1){
return str.length
}
if(str.charAt(0)=='0'){
return dp(str.slice(1))
}
var fNum = Number(str.slice(0, 2));
if (fNum > 25) {
return dp(str.slice(1));
} else {
if(str.slice(2)){
return dp(str.slice(1)) + dp(str.slice(2));
}else{
return dp(str.slice(1)) + 1;
}
}
}
return dp(String(num));
};