LeetCode#91-解码方法

Posted 菜鸡要加油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode#91-解码方法相关的知识,希望对你有一定的参考价值。

/*
91. 解码方法
一条包含字母 A-Z 的消息通过以下方式进行了编码:

\'A\' -> 1
\'B\' -> 2
...
\'Z\' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:

输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

        解题思路:动态规划
                 一个数字,有多少种
                 代表比他少一个数字或者少两个数字加起来
                 f(n)=f(n-1)且n位不为0   +    f(n-2)且n-1位和n位组成的数字在[10,26]
 */
public class p91 {
    public static int numDecodings(String s) {
        if(s.length()==0)return 0;
        if(s.length()==1&&Integer.parseInt(s)>=1)return 1;
        char arr[]=s.toCharArray();
        if(arr[0]==\'0\')return 0;//首字符为0怎么都无法解码
        int dp[]=new int[s.length()];
        dp[0]=1;
        String ss= s.substring(0,2);
        //System.out.println(ss);
        if(Integer.parseInt(ss)>10&&Integer.parseInt(ss)<=26&&Integer.parseInt(ss)!=20)dp[1]=2;
        else if(Integer.parseInt(ss)>26&&ss.charAt(1)==\'0\'){
            dp[1]=0;//如30
        }
        else dp[1]=1;//如37情况
        //System.out.println(dp[1]);
        //System.out.println("----------");

        for(int i=2;i<dp.length;i++){
            if(arr[i]!=\'0\'){
                dp[i]+=dp[i-1];
            }
            int num=(arr[i-1]-\'0\')*10+(arr[i]-\'0\');
            //System.out.println(num);
            //System.out.println("----------");
            if(num>=10&&num<=26){
                //System.out.println(num);
                dp[i]+=dp[i-2];
            }

        }
        return dp[s.length()-1];


    }

    public static void main(String[] args) {
        System.out.println(numDecodings("301"));
        char c=\'7\';
        //System.out.println("----------");
        //System.out.println((int)c);
        //System.out.println(c-\'0\');
    }
}

  运行结果:

以上是关于LeetCode#91-解码方法的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 91. 解码方法c++/java详细题解

LeetCode#91-解码方法

LeetCode 91 动态规划 Decode Ways 解码方法

leetcode 91. 解码方法

leetcode 91. 解码方法

leetcode-91-解码方法