递归回溯-解码方法

** 题目** 力扣91题-解码方法
** 思路:**
*由题可知,解码只有1个字母单独译+2个字母合并译两种方式.1个字母解码的为前一个的解码总数,2个字母解码的为前两个解码总数。
2个字母合并译就三种情况,当前字母为 0,1,2。其余都为1个字母单独译。

当前为‘0’,那么前面一个数字必须为1或2,则解码总数为前一个的解码总数,或者为0
当前为‘1’,有单独译和合并译,两种译法。
当前为‘2’,且前面为‘0’~‘6’。合并译。

** 代码:** (1)自底向下

 int numDecodings(string s) {
if (s[0] == '0') return 0;
int pre = 1, curr = 1;//dp[-1] = dp[0] = 1
for (int i = 1; i < s.size(); i++) {
    int tmp = curr;
    if (s[i] == '0')
        if (s[i - 1] == '1' || s[i - 1] == '2') curr = pre;
        else return 0;
    else if (s[i - 1] == '1' || (s[i - 1] == '2' && s[i] >= '1' && s[i] <= '6'))
        curr = curr + pre;
    pre = tmp;
}
return curr;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值