题解 | 把数字翻译成字符串

把数字翻译成字符串

https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    int solve(string nums) {
        if (nums == "0") {
            return 0;
        }
        int len = nums.size();
        vector<int> dp( len+1 ,1);//注意一般字符串的话dp[maxsize] maxsize一般是字符串的size +1 dp数组的索引i指的是对应str里第 i 个(索引为i-1)的结果。
        if (nums == "10"||nums == "20") {
            return 1;
        }
        for (int i = 1; i<len; i++) {
            if (nums[i] == '0' && nums[i-1] !='1' && nums[i-1] != '2') {
                return 0;
            } 
        }
        for (int i =2; i<=len; 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-2] + dp[i-1];
            }
            else {
                dp[i] = dp[i-1]; 
            }
        }
        return dp[len];
    }
};
//边界条件太多,还可以直接分为两种,单字符解码和双字符解码
单字符译码: dp[i] = dp[i-1]; 单字符 1-9 nums[i-1] != 0;
双字符译码: dp[i] = dp[i-2]; 双字符 10-26
第一位为 '0' 直接返回 '0'

全部评论

相关推荐

牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务