91:Decode Ways【DP】【字符串】

题目连接:click~

/*题意:【字符--数字】编码,给出一串数字,问解码后有多少种 */

/**
 *思路:考虑两位数的情况,比如26,可以解码为Z或BF
 *      方便计算,选择逆序扫描
 *      d[i]表示在第i个位置的解码数
 *      d[i]=   0              ,当s[i]为0时
 *              d[i+1]+d[i+2]  ,当前字符和后面的字符组成的数字小于等于26时
 *              d[i+1]         ,其他情况
 */


class Solution {
public:
    int numDecodings(string s) {
        int len = s.size();
        if(len == 0) return 0;
        int *d = new int[len+1];
        d[len] = 1;
        for(int i = len-1; i >= 0; i --) {
            if(s[i] == '0')
                d[i] = 0;
            else if(i+1 < len && (s[i] == '1' || ( s[i] == '2' && s[i+1] <= '6')) )
                d[i] =  d[i+1] + d[i+2];
            else
                d[i] = d[i+1];

        }
        return d[0];
    }
};

/*
一些数据:00,2,17,27
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值