剑指 Offer 46. 把数字翻译成字符串 #
- 标签:字符串、动态规划
- 难度:中等
题目大意 #
给定一个数字 num
,按照如下规则将其翻译为字符串:0
翻译为 a
,1
翻译为 b
,…,11
翻译为 l
,…,25
翻译为 z
。
要求:计算出共有多少种可能的翻译方案。
解题思路 #
可用动态规划来做。
将数字 nums
转为字符串 s
。设 dp[i]
表示字符串 s
前 i
个数字 s[0: i]
的翻译方案数。dp[i]
的来源有两种情况:
- 第
i - 1
、i - 2
构成的数字在[10, 25]
之间,则dp[i]
来源于:s[i - 1]
单独翻译的方案数(即dp[i - 1]
) +s[i - 2]
和s[i - 1]
连起来进行翻译的方案数(即dp[i - 2]
)。 - 第
i - 1
、i - 2
构成的数字在[10, 25]
之外,则dp[i]
来源于:s[i]
单独翻译的方案数。
代码 #
|
|