其他分享
首页 > 其他分享> > 【动态规划】【爬台阶题型】 91. 解码方法

【动态规划】【爬台阶题型】 91. 解码方法

作者:互联网

91. 解码方法 - 力扣(LeetCode) (leetcode-cn.com)
此为剑指 Offer 46. 把数字翻译成字符串 姐妹题

爬台阶题型:

image

其中第2个关于dp[i]的定义要注意:

class Solution {
    public int numDecodings(String s) {
        int n =s.length();
        // 注意:必须得是" ",有个空格,不能是""
        s=" "+s;
        char[] ch = s.toCharArray();
        int[] dp = new int[n+1];
        dp[0]=1;
        for(int i=1;i<=n;i++)
        {
            // 单独取一个数
            int a=ch[i]-'0';
            //取两个数,看一看是否能组合
                // 因为前面补了 “ ” ,字符从1开始,所以此处不是 (ch[i-2]-'0')*10 +(ch[i-1]-'0');
            int b=(ch[i-1]-'0')*10 +(ch[i]-'0');

            if(a>=1&&a<=9)
            {
                dp[i]=dp[i-1];
            }
            // 如果当前下标i只能和前面一个数组合。
            /*
                例如: 12
                    [1,2] [12]
                    突然来了个7 -> 127
                    也只能 两种
                    [1,2,7] [12,7]  不可能会有[1,27] 因为27超出范围了

            */

            if(b>=10&&b<=26)
            {
                dp[i]=dp[i-2];
            }
            // 如果既符合 a 有符合b ,那么就是说当前值可以由前一位推出,也可以由前两位推出。那么肯定+1;
            if(a>=1&&a<=9&&b>=10&&b<=26)
            {
                dp[i]= dp[i-1]+dp[i-2];
            }

        }
        return dp[n];
    }
}

标签:题型,26,int,解码,82,&&,91,dp
来源: https://www.cnblogs.com/coderpeng/p/16200229.html