zoukankan      html  css  js  c++  java
  • 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');
        }
    }
    

      运行结果:

  • 相关阅读:
    1007 正整数分组
    Review: JQuery
    Summary: DOM modification techniques
    B
    D
    C
    hdu5592 倒序求排列+权值线段树
    主席树入门——询问区间第k大pos2104,询问区间<=k的元素个数hdu4417
    二维前缀和好题hdu6514
    莫比乌斯反演理解
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13254935.html
Copyright © 2011-2022 走看看