把数字翻译成字符串
作者:
枳花明
,
2024-11-21 15:47:50
,
所有人可见
,
阅读 1
题目链接
#include <vector>
class Solution {
public:
int solve(string nums) {
// write code here
//排除0
if (nums[0] == '0') return 0;
//排除只有一种可能的10 和 20
if (nums == "10" || nums == "20")
return 1;
//当0的前面不是1或2时,无法译码,0种
for (int i = 1; i < nums.length(); i++) {
if (nums[i] == '0')
if (nums[i - 1] != '1' && nums[i - 1] != '2')
return 0;
}
int n = nums.size();
vector<int> f(n+10); // 当数组长度为i时,一共有f[i]种方案
// 初始化
f[0] = 1;
f[1] = 1;
for ( int i = 2; i <= n; i++ ) {
int c = (nums[i - 2] - '0') * 10 + (nums[i - 1] - '0');
// 遇到10、20只能结合在一起
if ( (11 <= c && c <= 19 )||(21 <= c && c <= 26) )
{
f[i] = f[i - 2] + f[i - 1];
}
else f[i] = f[i - 1];
}
return f[n];
}
};