zoukankan      html  css  js  c++  java
  • [Leetcode] 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.

    Solution:

    Use Dynamic Programming method to solve the problem, for positition i, we can get that

    if substring(i-1,i) is a valid string, the number of ways decoding from the beginning to position i equals the number of ways decoding from the beginning to position i-1;

    if substring(i-2,i) is a valid string, the number of ways decoding from the beginning to position i equals the number of ways decoding from the beginning to position i-2;

     1 public class Solution {
     2     public int numDecodings(String s) {
     3         if(s==null||s.length()==0)
     4             return 0;
     5         int[] dp=new int[s.length()+1];
     6         dp[0]=1;
     7         if(isValid(s.substring(0,1))){
     8             dp[1]=1;
     9         }else{
    10             dp[1]=0;
    11         }
    12         for(int i=2;i<=s.length();++i){
    13             if(isValid(s.substring(i-1, i)))
    14                 dp[i]=dp[i-1];
    15             if(isValid(s.substring(i-2, i))){
    16                 dp[i]+=dp[i-2];
    17             }
    18             
    19         }
    20         return dp[s.length()];
    21     }
    22     private boolean isValid(String s) {
    23         // TODO Auto-generated method stub
    24         int N=s.length();
    25         if(N==1){
    26             return(s.charAt(0)>='1'&&s.charAt(0)<='9');
    27         }else if(N==2){
    28             return((s.charAt(0)=='1'&&s.charAt(1)>='0'&&s.charAt(1)<='9')||
    29                     (s.charAt(0)=='2'&&s.charAt(1)>='0'&&s.charAt(1)<='6'));
    30         }
    31         return false;
    32     }
    33 }
  • 相关阅读:
    [python] 类组合与聚合关系
    [python] 伪私有属性,防止变量名冲突
    [vim] 配置文件之常用命令模式
    [VIM] 编辑器---多行注释和取消注释及多行复制和黏贴
    [Visual Studio Code] 执行python
    [C] 编译器codeblocks安装注意
    字符串全排列
    集合全量子集提取
    random函数详解
    Solr常用命令总结
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/4261399.html
Copyright © 2011-2022 走看看