难度:中等
题目描述:
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例:
输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
解题思路:
1 如果数字中所有的连续两个数字组合起来都比25 要大, 说明只有一种翻译方法 比如 555 只能翻译成 f f f
2 如果连续连个相邻数字组合成的数字比10 小, 说明这两个数字也只有一种翻译方法。 比如 501 只能翻译成 f a b
3 当相邻的两个数字组合成的数字 10 <= num <= 25 时, dp[i] = dp[i-1] + dp[i-2] (i>1) dp[0] = 1; dp[1] = 2;
var translateNum = function(num) {if (num == 0) return 1;let str = num.toString();const length = str.length;let dp = new Array(length).fill(0);dp[0] = 1;for(let i = 1; i < length; i++){let temp = Number(str[i-1] + str[i]);if (10 <= temp && temp <= 25){if (i > 1)dp[i] = dp[i-1] + dp[i-2];elsedp[i] = 1 + dp[i-1];}else {dp[i] = dp[i-1];}}return dp.pop();};
