【力扣刷题总结之91. 解码方法】

相关标签

一、题目要求

 二、题解和代码实现

1.题解

非官方题解,先看思路理解

2.代码实现

代码如下(示例):

class Solution {
    public int numDecodings(String s) {
            int len = s.length();
            s = " "+s;//s前面加空格,
            int[] dp = new int[len + 1];
            char[] chars = s.toCharArray();
            //其他细节:由于题目存在前导零,而前导零属于无效 item。可以进行特判
            // 可以往字符串头部追加空格作为哨兵,追加空格既可以避免讨论前导零,也能使下标从 1 开始,简化 dp[i-1] 等负数下标的判断。
            dp[0] = 1;

            for (int i = 1; i <dp.length ; i++) {
                // a : 代表「当前位置」单独形成 item
                // b : 代表「当前位置」与「前一位置」共同形成 item
                int a = chars[i]-'0';//a情况
                int b = (chars[i-1]-'0')*10+(chars[i]-'0');//b情况

                if (a>=1 && a<=9){//当1<= a情况 <=9时
                    dp[i] = dp[i-1];// 如果 a 属于有效值,那么 dp[i] 可以由 dp[i - 1] 转移过来
                }

                if (b>=10 && b<=26){
                    dp[i]+=dp[i-2];// 如果 b 属于有效值,那么 dp[i] 可以由 dp[i - 2] 或者 dp[i - 1] + dp[i - 2] 转移过来
                }
            }
            return dp[len];
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值