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.

     1 public class Solution {
     2     public int numDecodings(String s) {
     3        int num = 0;
     4         if(s.length() > 0){
     5             int[] decodeways  = new int[s.length()];
     6             if(Integer.parseInt(s.substring(0, 1)) == 0)
     7                 return 0;
     8             else
     9                 decodeways[0] = 1;            
    10             if(s.length()> 1){
    11                 if(Integer.parseInt(s.substring(1, 2)) != 0){
    12                     if(Integer.parseInt(s.substring(0, 2)) > 26)
    13                         decodeways[1] = 1;
    14                     else{
    15                         if(Integer.parseInt(s.substring(0, 1)) == 0)
    16                             return 0;
    17                         else
    18                             decodeways[1] = 2;                            
    19                     }                
    20                 }                
    21                 else{
    22                     if(Integer.parseInt(s.substring(0, 1)) > 2)
    23                         return 0;
    24                     else
    25                         decodeways[1] = 1;                        
    26                 }
    27                 for(int i = 2; i < s.length(); ++i){
    28                     if(Integer.parseInt(s.substring(i, i + 1)) != 0){
    29                         if(Integer.parseInt(s.substring(i - 1, i + 1)) > 26 || 
    30                             Integer.parseInt(s.substring(i - 1, i)) == 0)
    31                             decodeways[i] = decodeways[i - 1];
    32                         else
    33                             decodeways[i] = decodeways[i - 1] + decodeways[i - 2];
    34                     }
    35                     else{
    36                         if(Integer.parseInt(s.substring(i - 1, i)) == 0 || 
    37                             Integer.parseInt(s.substring(i - 1, i)) > 2){
    38                             num = 0;
    39                             break;
    40                         }
    41                         else
    42                             decodeways[i] = decodeways[i - 2];
    43                     }                    
    44                 }
    45             }
    46             num = decodeways[s.length() - 1];
    47         }
    48         return num;    
    49     }
    50 }

    code 2, the same algorithm as above

     1 public class Solution {
     2     public int numDecodings(String s) {
     3       int num = 0;
     4         if(s.length() == 0 || s.charAt(0) == '0')
     5             return num;
     6           else{
     7             int[] ways = new int[s.length() + 1];
     8             ways[0] = ways[1] = 1;
     9             for(int i = 2; i < s.length() + 1; ++i){
    10                 int cur = Integer.parseInt(s.substring(i - 1, i));
    11                 int pre = Integer.parseInt(s.substring(i - 2, i - 1));
    12                 if(cur != 0){
    13                     if(pre != 0){
    14                         ways[i] = (Integer.parseInt(s.substring(i - 2, i)) < 27) ? ways[i - 1] + ways[i - 2] : ways[i - 1];
    15                     }
    16                     else
    17                         ways[i] = ways[i - 2];                        
    18                 }
    19                 else{
    20                     if(pre > 2 || pre == 0)
    21                         return num;
    22                     else
    23                         ways[i] = ways[i - 2];
    24                 }    
    25             }
    26             num = ways[s.length()];    
    27         }
    28         return num;
    29     }
    30 }

    The third code:

    public class Solution {
        public int numDecodings(String s) {
           int result = 0;
    		int length = s.length();
    		if(length > 0){
    			int[] ways = new int[length + 1];
    			ways[length] = 1;
    			ways[length - 1] = (s.charAt(length - 1) - '0' == 0) ? 0 : 1;
    			for(int i = length - 2; i > -1; --i){
    				if(s.charAt(i)-'0' == 0)
    					ways[i] = 0;
    				else if((s.charAt(i) - '0' == 1)){
    					if(s.charAt(i + 1) - '0' == 0)
    						ways[i] = ways[i + 2];
    					else
    						ways[i] = ways[i + 2] + ways[i + 1];
    				}
    				else if(s.charAt(i) -'0' == 2){
    					if(s.charAt(i + 1) - '0' == 0)
    						ways[i] = ways[i + 2];
    					else if(s.charAt(i + 1) - '0' != 0 && s.charAt(i + 1) - '0' < 7)
    						ways[i] = ways[i + 1] + ways[i + 2];
    					else
    						ways[i] = ways[i + 1];					
    				}
    				else{
    					if(s.charAt(i + 1) - '0' == 0)
    						ways[i] = 0;
    					else
    						ways[i] = ways[i + 1];
    				}
    			}
    			result = ways[0];
    		}
    		return result;
        }
    }
    

      

  • 相关阅读:
    SqlHelper
    C#中gridView常用属性和技巧介绍
    oracle中的存储过程例子
    log4j.properties配置详解
    Ant之build.xml
    jQuery源码
    jQuery实现分页
    mysql中log
    SQL只获取字段中的中文字符
    子Repeater获取父级Repeater绑定项的值
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3536707.html
Copyright © 2011-2022 走看看