题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
class Solution {
public:
int solve(string nums) {
// write code here
if(nums.empty()||nums == "0") return 0;//剔除 空和0情况
if(nums == "10" || nums == "20") return 1; // 剔除只有一种情况一种情况的两位数
for(int i = 1; i <= nums.size(); ++i)// 排除0上一位不为1、2情况
{
if(nums[i] == '0' && nums[i-1] != '1' && nums[i-1] != '2') return 0;//这里容易搞错,记得都不是1 、2,那么就是就是没法编码。0前面不是1也不是2,那么就不可编码
}
vector<int> dp(nums.size()+1, 1); // 注意个数得加一,否则不好记录最大位置;初始化默认当前编码方式只有一种
for(int i = 2; i <= nums.size(); ++i)
{
if ((nums[i-1] >= '1' && nums[i-1] <= '9' && nums[i-2] == '1') || (nums[i-1] >= '1' && nums[i-1] <= '6' && nums[i-2] == '2')) {// 统计 11-19 、 21-26 可有两种编码情况形式;故计算上次,上上次情况
dp[i] = dp[i-1] + dp[i-2];
}else {
dp[i] = dp[i-1]; // 一种编码方式,则计算只有一种情况
}
}
// std::cout << dp[nums.size()] << std::endl;
return dp[nums.size()];
}
};
挤挤刷刷! 文章被收录于专栏
记录coding过程

