LeetCode--decode-ways

本文介绍了一种基于动态规划的消息解码算法,该算法能够计算出给定数字编码字符串的所有可能字母解码方式的数量。通过递推公式计算每一步的解码数,并利用向量存储中间结果,最终返回整个字符串的解码数。

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

题目描述


A message containing letters fromA-Zis being encoded to numbers using the following mapping:

'A' -> 1
'B' -> 2
...
'Z' -> 26

Given an encoded message containing digits, determine the total number of ways to decode it.

For example,
Given encoded message"12", it could be decoded as"AB"(1 2) or"L"(12).

The number of ways decoding"12"is 2.


class Solution {
public:
    int numDecodings(string s)
    {
         /** dp[i] 表示i的字符的合法编码数量,取决于当前字符
        dp[i] += dp[i-1],if s[i-1] ~('0'--'9')
        dp[i] += dp[i-2],if s[i-2] == '1' || (s[i-2]=='2' && s[i-1]>='0' && s[i-1]<='6')
         
    **/
        if(s.length()==0 || s[0] == '0')
            return 0;
        int len = s.length();
        vector<int> dp(len+1,0);
        dp[0]= 1,dp[1] = 1;
        for(int i=2;i<=len;i++)
        {
            if(s[i-1]>='1' && s[i-1]<='9')
                dp[i] += dp[i-1];
            if(s[i-2]=='1' || (s[i-2]=='2' && s[i-1]>='0' && s[i-1]<='6'))
                dp[i] += dp[i-2];           
        }
        return dp[len];                    
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值