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 }

 

posted on 2013-09-26 06:52  Step-BY-Step  阅读(186)  评论(0编辑  收藏  举报

导航