题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 解码 * @param nums string字符串 数字串 * @return int整型 */ function solve( nums ) { // dp[i]表示前i个数有dp[i]种编码方法 // 如果当前数字编码方式是单个字符编码,则dp[i] = dp[i - 1],即前i - 1个数字的所有编码方式后面直接加上该字符即可,因此编码方法数跟i - 1的编码方法数一样,是同一种编码方式 // 如果当前数字编码方式是单个字符编码或跟前面的1或2结合编码,则还应该加上dp[i - 2],即dp[i] = dp[i - 1] + dp[i - 2],意思是,前 i-2 个数字的所有解码方式加上这两个字符的组合解码即可 // 字符串中所有数字都必须参与编码,因此出现第一个数为0的情况就是无效的 if(nums.length === 0 || nums[0] == 0) return 0; const dp = new Array(nums.length + 1).fill(0); dp[0] = 1; dp[1] = 1; for(let i = 2; i <= nums.length; i++){ // 只要当前位置不为0,就可以进行单个字符编码 // 注意:索引i从2开始 当前的字符索引是i - 1 if(nums[i - 1] !== '0'){ dp[i] += dp[i - 1]; } // 判断当前字符是否可以和前一个字符进行组合编码,如果可以dp[i]再加上dp[i - 2] const twoDigit = parseInt(nums[i - 2] + nums[i - 1]); if (twoDigit >= 10 && twoDigit <= 26) { dp[i] += dp[i - 2]; } } return dp[nums.length]; } module.exports = { solve : solve };