剑指offer46_把数字翻译成字符串
题目描述:
如果对于两位数字的翻译不加上限制,我们可以发现翻译的方法数量增长很像青蛙跳台阶,
用 i 标识数组中元素的下标,我们可以发现,字符串的第 i 位置:
可以单独作为一位来翻译
如果第 i - 1位和第 i 位组成的数字在 10 到 25 之间,可以把这两位连起来翻译
所以可以得出动态规划转移方程
代码如下:
class Solution {
public:
int translateNum(int num) {
string str = to_string(num);
//p代表f(i - 2) q代表f(i - 1) r代表f(i)
int p = 0, q = 0, r = 1;
for(int i =0; i < str.size(); i++)
{
p = q;
q = r;
if(i == 0)
{
continue;
}
//第 i - 1位和第 i 位组成的数字
string ch = str.substr(i - 1, 2);
if(ch <= "25" && ch >= "10")
{
r = r + p;
}
}
return r;
}
};