• 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 }
  • 相关阅读:
    oracle 索引
    oracle 子查询因子化 浅谈(with的使用)
    大数据的遐想
    数据挖掘(算法概要链接)
    orcale 修改字段属性
    sql 对一张表进行按照不同条件进行多次统计
    oracle dblink
    oracle作业
    SQL效率的几点心得
    提高SQL语句的性能
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3340018.html
Copyright © 2020-2023  润新知