- 按键认证大神
- 2699998
- 3587
- 11
- 2173 朵
- 7386 个
- 1021 个
- 91120
- 2014-08-23
|
1#
t
T
发表于 2022-07-02 22:40
|
|只看楼主
题目描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 我们把一个字符串编码成一串数字,再考虑逆向编译成字符串。 由于没有分隔符,数字编码成字母可能有多种编译结果,例如 11 既可以看做是两个 ‘a’ 也可以看做是一个 ‘k’ 。但 10 只可能是 ‘j’ ,因为 0 不能编译成任何结果。 现在给一串数字,返回有多少种可能的译码结果。 数据范围:字符串长度满足 0 <n≤90
【示例1】 输入:"12" 返回值:2 说明:2种可能的译码结果("ab" 或"l")
【示例2】 输入:"31717126241541717" 返回值:192 说明:192种可能的译码结果
题目难度:中等 题目来源:把数字翻译成字符串 题目交流: 584781753
|
- Import "SmAssert.dll"
- Function 数字翻译成字符串(数字)
- // 您的代码写在这里
- End Function
- SmAssert 数字翻译成字符串("12") = 2
- SmAssert 数字翻译成字符串("31717126241541717") = 192
复制代码 参考题解- Import "SmAssert.dll"
- Function 数字翻译成字符串(数字)
-
- '【作者】:神梦无痕
- '【QQ】:1042207232
- '【Q群】:584781753
-
- Dim i, dp
-
- ' 排除0
- If 数字 = 0 Then 数字翻译成字符串 = 0 : Exit Function
- ' 10 和 20 和个位数只有 1 种情况
- If 数字 = 10 Or 数字 = 20 Or Len(数字) = 1 Then 数字翻译成字符串 = 1 : Exit Function
-
- ' 出现无法编译则为 0 种情况
- For i = 1 To Len(数字)
- If Mid(数字, i, 1) = 0 Then
- If Mid(数字, i - 1, 1) <> "1" And Mid(数字, i - 1, 1) <> "2" Then
- 数字翻译成字符串 = 0
- Exit Function
- End If
- End If
- Next
-
- ' 数组初始化为 1
- dp = Split(Space(Len(数字) + 1), " ")
- For i = 0 To Len(数字)
- dp(i) = 1
- Next
- For i = 2 To Len(数字)
- If (Mid(数字, i - 2 + 1, 1) = "1" And Mid(数字, i - 1 + 1, 1) <> "0") Or _
- (Mid(数字, i - 2 + 1, 1) = "2" And Mid(数字, i - 1 + 1, 1) > "0" And Mid(数字, i - 1 + 1, 1) < "7") Then
- dp(i) = dp(i - 1) + dp(i - 2)
- Else
- dp(i) = dp(i-1)
- End If
- Next
-
- 数字翻译成字符串 = dp(Len(数字))
- End Function
- SmAssert 数字翻译成字符串("12") = 2
- SmAssert 数字翻译成字符串("31717126241541717") = 192
复制代码 插件下载【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误
|