一、题目

二、题目分析
1.它输入得数据不是数组也不是字符串,所以第一步把输入得数据转换成字符串形式 Let n = num.toString();
2.这和青蛙的题目相似,为什么这么讲,因为判 字母 只能从 0-25 的数字里翻译出来,所以翻译不会超过三位数,只能再一位数或者二位数里
3.dp[i]:翻译字符串里的前 i 个的方法
为什么dp[0]等于1,举个例子 13 ,那 13 就有两种方式:第一种是 1:b,3:d;第二种方式:13:n;刚刚讲的dp是翻译字符串里的前i个的方法,dp[2]说明 13 有翻译两种的方式:2-1=1;两个dp[1]会有矛盾,但又不能超过dp[2],所以这里放一个dp[0]=1;
4、根据上面的例子判断:一个数字:有两种方式 或者 有一种方式,那我们应该怎么去判断?我们要知道 最大值也就25,超过了就说明没有这个字母,但是也不能低于10,低于说明只有一种方式,不存在两种方式;这样我们有了判断条件,只要我们把当前指针和下一位的指针 的数字组成来判断刚刚的条件,如果有两种方式就:dp[i]=dp[i-1]+dp[i-2];如果一种方式就dp[i]=dp[i-1];
三、代码
/** * @param {number} num * @return {number} */ var translateNum = function(num) { let str = num.toString(); let n = str.length; let dp = new Array(); dp[0] = 1; dp[1] = 1; for(let i = 2; i<=n; i++){ const tmp = Number( str[i-2] + str[i-1] ); if( tmp >= 10 && tmp <= 25){ dp[i] = dp[i-2] + dp[i-1]; }else{ dp[i] = dp[i-1]; } } return dp[n]; };
浙公网安备 33010602011771号