zoukankan      html  css  js  c++  java
  • 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: the most important one is matrix[0] = 1. 

     1 public class Solution {
     2     public int numDecodings(String s) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         if(s == null || s.length() == 0) return 0;
     6         else{
     7             int[] matrix = new int[s.length()+1];
     8             matrix[0] = 1;
     9             matrix[1] = 1;
    10             if(Integer.valueOf(s.substring(s.length() -1, s.length())) == 0)
    11                 matrix[1] = 0;
    12             for(int i = s.length() - 2; i > -1; i --){
    13                 int sum = 0;
    14                 if(Integer.valueOf(s.substring(i, i+1)) > 0){
    15                     sum += matrix[s.length() - i - 1];
    16                 }
    17                 if(Integer.valueOf(s.substring(i, i+2)) < 27 && Integer.valueOf(s.substring(i, i+2)) > 9)
    18                     sum += matrix[s.length() - i - 2];
    19                 matrix[s.length() - i] = sum;
    20             }
    21             return matrix[s.length()];
    22         }
    23     }
    24 }

     第二遍:

    从前往后做,这样更简单。

     1 public class Solution {
     2     public int numDecodings(String s) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         if(s == null || s.length() == 0) return 0;
     6         int[] matrix = new int[s.length() + 1];
     7         matrix[0] = 1;
     8         for (int i = 0; i < s.length(); i ++){
     9             if (0 < Integer.valueOf(s.substring(i, i + 1)))
    10                 matrix[i + 1] += matrix[i];
    11             if (i > 0 && Integer.valueOf(s.substring(i - 1, i + 1)) < 27 && Integer.valueOf(s.substring(i - 1, i + 1)) > 9)
    12                 matrix[i + 1] += matrix[i - 1];
    13         }
    14         return matrix[s.length()];
    15     }
    16 }
  • 相关阅读:
    LeetCode -- Rectangle Area
    【转】VS常用快捷键
    C++中include<> 与 include" " 的区别
    浅析_tmain() 与 main() 函数的区别
    VS2013下配置OpenCV 3.0.0 &&& VS2013下配置Opencv2.4.9
    LeetCode -- Valid Parenthese
    杂想 · 警醒
    LeetCode -- Length of Last Word
    LeetCode -- Valid Sudoku
    LeetCode -- Binary Tree Level Order Traversal II
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3340018.html
Copyright © 2011-2022 走看看