题解 | #把数字翻译成字符串#
把数字翻译成字符串
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过程