题目简介:
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
1 | 输入: 12258 |
提示:
0 <= num <
$2^{31}$
思路:
使用动态规划,dp[i]
的意思为下标0 ~ i
的字符串翻译方法的数量。
由于单个数字必定能有一种翻译,单独翻译对dp[i]
的贡献为dp[i - 1]
,所以dp[i] += dp[i - 1]
。
如果第i
位的数字能与i - 1
位的数字构成可翻译的数字X
(即10 <= X <= 25
),那么把第i
位和第i - 1
位看成一个整体,有一种翻译方法,那么此时对dp[i]
的贡献为dp[i - 2]
,所以dp[i] += dp[i - 2]
。
最后返回dp[num_str.size() - 1]
即可。
tips:
- 可在字符串的最前面加
0
,方便dp
数组的初始化。 - 学会使用
substr
函数,const char[]
类型,在标准C++中不能做+
操作。
代码如下:
1 | class Solution { |