题解 | #把数字翻译成字符串#
把数字翻译成字符串
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]
}
