思路(动态规划法)
状态定义:dp[i]表示以num前i个数字有多少种翻译方法
转移方程:
- 如果num第i-2位和第i-1位对应的数字大于等于10,小于等于25,dp[i] = dp[i-2] + dp[i-1];
- 否则,dp[i] = dp[i-1]
初始化:dp[0] = 1;dp[1] = 1
返回值:dp[str.length]
代码
/**
* @param {number} num
* @return {number}
*/
var translateNum = function(num) {
var str=num.toString();
var dp = new Array(str.length+1);//dp[i]表示以num前i个数字有多少种翻译方法
dp[0] = 1;
dp[1] = 1;
for(let i = 2; i <= str.length; i++) {
if(parseInt(str[i-2] + str[i-1]) <= 25 && parseInt(str[i-2] + str[i-1]) >= 10) dp[i] = dp[i-2] + dp[i-1];
else dp[i] = dp[i-1];
}
return dp[str.length];
};