把数字翻译成字符串_牛客题霸_牛客网 (nowcoder.com)
根据题目描述只有1-26的数字有对应的字母表示
所以我们首先要对一些错误情况进行处理,
1. 如果num = ”0“ 错误;
如果 num = ”10“ ”20“ 只有一种情况;
如果 i = “0” 那他前一位必须是1或者2 否则错误
2. 其中
dp[i]
表示以nums[i-1]
结尾的解码方式的数量。在1 - 9 之间只有一种情况所以是dp[i] = dp[i -1]
在11-19
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here if(nums == "0") return 0; if(nums == "10" || nums == "20") return 1; for(int i = 1; i < nums.size(); i++){ if(nums[i] == '0') { if(nums[i-1] != '1' && nums[i-1] != '2') return 0; } } vector<int>dp(nums.size()+1, 1); for(int i = 2; i <= nums.size(); i++){ if(nums[i-2] == '1' && nums[i-1] != '0' || nums[i-2] == '2' && nums[i-1] > '0' && nums[i-1] < '7'){ dp[i] = dp[i-1] + dp[i-2]; }else{ dp[i] =dp[i-1]; } } return dp[nums.size()]; } };
之间 和在 21 - 27之间有两种情况所以是dp[i] = dp[i -1] + dp[i-2]