zoukankan      html  css  js  c++  java
  • [leedcode 91] Decode Ways

    A message containing letters from A-Z is being encoded to numbers using the following mapping:

    'A' -> 1
    'B' -> 2
    ...
    'Z' -> 26
    

    Given an encoded message containing digits, determine the total number of ways to decode it.

    For example,
    Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).

    The number of ways decoding "12" is 2.

    public class Solution {
        public int numDecodings(String s) {
            /*本题类似于上台阶求次数的题型,因此需要利用DP思想保存住中间的子解,但是dp[i] 是否等于dp[i-1] + dp[i-2]需要判断字符是否满足要求
            
            
            使用递归会超时,所以使用动态规划DP的方法来做。
            对于串s[0...i]的解码数量应该和s[0...i-1], s[0...i-2]的解码数量有关系。
            dp[i]: 代表s[0...i-1]的解码数量,因此DP的长度是s长度+1,DP[0]=DP[1]=1
            dp[i] = { (s[i-1]!='0')?dp[i-1]:0 } + { s[i-2...i-1]<='26' ? dp[i-2] : 0 } ;
            
            从头到尾扫这个String,从s[0...i-1]组成的String,有多少种解码组合,那么有两种情况
    
            第一:如果s[i-1]所对应的的单个字符可以解码,那么dp[i](s[0...i-1])就包括前dp[i-1]位所积累的组合数 dp[i] = dp[i-1] 
    
            第二:如果不仅s[i-1]所对应的的单个字符可以解码,s[i-2...i-1],两个字符组成的也可以解码,那么不仅包括dp[i-1]积累的组合数,也包括dp[i         -2]位积累的组合数 dp[i] = dp[i-1] + dp[i-2]
    
            我们建一个n+1的数组,为了程序简洁,我们在最前面放一个1。*/
            if(s==null||s.length()<1) return 0;
            if(s.charAt(0)=='0') return 0;
            int[]dp=new int[s.length()+1];
            dp[0]=1; dp[1]=1;
            for(int i=2;i<=s.length();i++){
                if(s.charAt(i-1)!='0')dp[i]=dp[i-1];
                if(isValid(s.substring(i-2,i))) dp[i]+=dp[i-2];
            }
            return dp[s.length()];
        }
        public boolean isValid(String s){
            if(s.charAt(0)=='0') return false;
            if(s.charAt(0)=='1'||(s.charAt(0)=='2'&&s.charAt(1)<='6')) return true;
            return false;
        }
    }
  • 相关阅读:
    pyspark读取parquet数据
    python求时间差
    pandas索引操作之loc,iloc,ix等方法
    pandas的concat和drop函数
    mysql语句的书写顺序和执行顺序
    hive的lower,upper,length,concat,lpad,rpad,cast,split函数简述
    hive的floor函数,ceil函数,round函数
    Pandas建立空的dataframe和cumsum累加函数
    Python基础笔记二之求序列均值、标准差、中位数、分位数
    NAT实验
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4651384.html
Copyright © 2011-2022 走看看