题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 解码 * @param nums string字符串 数字串 * @return int整型 */ func solve( nums string ) int { // 有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果 数据范围:字符串长度满足 // dp[i] 到字符串的第'i'个字符为止,总共有多少种解码方式 // 注意 0 不能独立解码 // 从 1 ~ 9,仅有1种解码方式 // '0' 不能独立解码,因此如果字符的前一个字符是'0',10、20 …… 说明 dp[i] = dp[i-2] // '10' ~ '26' 即 '10' <= s[i-1][i] <= '26', 则dp[i] += dp[i-2] // != 0 表示克独立进行解码 dp[i] += dp[i-1] // dp[0] = 1 // dp[1] 输入第一个字符是'0' 则 为 否则 '1' // 边界情况 如果字符串以'0'开头,则无法通过解码,直接返回'0' if nums[0] == '0' { return 0 } n := len(nums) dp := make([]int, n+1) dp[0],dp[1] = 1, 1 for i := 2; i <= n;i++ { if nums[i-1] != '0' { dp[i] += dp[i-1] } twoDigit := (nums[i-2]-'0')*10 + (nums[i-1] - '0') if twoDigit >= 10 && twoDigit <= 26 { dp[i] += dp[i-2] } } return dp[n] }