题目
思路
定义方法总数为dp数组,其中默认dp[0]=1;
dp[i] 表示前 i 位解码的总数,它主要分两种情况:
第 i 位数字无法和前面的数组合(只能单独一位解码),
比如 1245, 5 只能单独翻译,那么1245的方法数和 124 是一样的
dp[i] = dp[i - 1]
第 i 位数字可以和前面的数组合(可以两位一起解码),
比如 1215, 5 可以选择 组合 和不组合,最终结果为两种情况相加
a. 选择组合,15看成是整体,那么 dp[i] = dp[i - 2]
b. 不选择组合,5单独翻译,那么 dp[i] = dp[i - 1]
代码
var translateNum = function(num) {
let i, dp = [1];
for(i = 1; num > 0; i++,num = Math.floor(num/10)) {
console.log(num)
console.log(num%100)
if(num%100 > 9 && num % 100 < 26) {
if(i === 1) {
dp[i] = 2;
} else {
dp[i] = dp[i - 1] + dp[i - 2];
}
} else {
dp[i] = dp[i - 1];
}
}
console.log(dp)
return dp[i - 1];
};