动态规划 - 91. 解码方法

本文介绍了一个名为Solution的类,它使用动态规划的方法解决字符串解码问题,特别关注当输入字符串由单个字符或连续两个字符组成数字的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

91. 解码方法

在这里插入图片描述

class Solution {
public:
    int numDecodings(string s) {
        // 1.明确状态含义:dp[i]表示前i个字符的解码方案数
        int sLength = s.length();
        vector<int> dp(sLength, 0);
        if(s[0] == '0'){
            return 0;
        }
        else{
            dp[0] = 1;
        }

        for(int i = 1; i < sLength; i++){
            int current = s[i] - '0', pre_cur = (s[i - 1] - '0') * 10 + s[i] - '0';
            // 第一种情况是使用一个字符s[i]进行解码,只是在原有的每个解码方案之后加一个数字,不会影响解码方案
            if(current != 0){
                dp[i] = dp[i - 1];
            }
            // 第二种情况是使用两个字符s[i-1]和s[i]进行编码。s[i-1]不能等于0,并且s[i-1]和s[i]组成的整数必须小于等于26
            if(pre_cur >= 10 && pre_cur <= 26){
                if(i == 1){
                    dp[i] = dp[i] + 1;
                }
                else{
                    dp[i] = dp[i] + dp[i - 2];
                }
            }
        }

        return dp[sLength - 1];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值