剑指 Offer 46. 把数字翻译成字符串
首先的话,需要将数字转化成字符串的格式的,才可以实现索引
接着的话,需要对其的逻辑进行思考,
比如对于 1 2,如果是这两个数字的话,可以单独看作1和2,也可以看成12
对于1 2 3,如果是这两个数字的话,可以单独看作 12 和 3,也可以看成 1 和 23,然后再对12和23进行上一步骤的运算,
所以我们可以得到对于某个数而言,其当前的数字,从它自身的数字而言的话,其自己的数目会等于上一个对应的数字,而如果其与上一个数字结合后能够符合要求,就是大于等于1,小于等于25的话,就会等于上上一个对应的数字。
用表达式可以表示为 d[i] = d[ i - 1] (这个表示前一个的数目) + d[ i - 2] (这个表示与上一个数字进行结合后,对应前两个的数目)
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 231
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ba… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number} num
* @return {number}
*/
var translateNum = function(num) {
// 使用动态规划
// 如果是当前的数目的话,等于上一个数目
// 如果与上一个数可以结合起来的话,等于上上数目
// 两者之和就是当前的数目
// 对于第一个的话,其最大的数,等于
// 转化成字符串进行处理
var number = String(num)
var res = [1,1]
if(number.length == 1)return 1
for(var i = 1;i < number.length;i++){
// 当前对应的选择
var tem = 0;
var bef =number[i - 1] + number[i]
tem = res[i]
if( bef >= '1' && bef <= '25'){
tem += res[i - 1]
}
res.push(tem)
}
return res[res.length - 1]
};
\