LeetCode - Decode Ways | Darren's Blog



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.
Transformation function as:
Count[i] = Count[i-1]  if S[i-1] is a valid char
       or   = Count[i-1]+ Count[i-2]  if S[i-1] and S[i-2] together is still a valid char.
public int numDecodings(String s) {
        if (s == null || s.length() == 0)
            return 0;
        int n = s.length();
 
        // table[i]: the number of decodings for s[i...]
        int[] table = new int[n+1];
        // table[n]: upon reaching the end, earlier digit(s) is a way of decoding itself
        // It is used to handle the cases such as s="15"
        table[n] = 1;
 
        // Consider the last digit individually
        char last = s.charAt(n-1);
        if (last >= '1' && last <= '9')
            table[n-1] = 1;
 
        // Calculate table[i] according to s[i], table[i+1], and table[i+2]
        for (int i = n-2; i >= 0; i--) {
            char c = s.charAt(i);
            if (c < '1' || c > '9')     // s[i...] starts with invalid digit
                table[i] = 0;
            else if (c > '2' || c == '2' && s.charAt(i+1) > '6')    // s[i,i+1] must be decoded together
                table[i] = table[i+1];
            else    // Decoded as s[i], s[i+1...], or s[i,i+1], s[i+2...]
                table[i] = table[i+1] + table[i+2];
        }
 
        // Return the number of decodings for s
        return table[0];
    }
Read full article from LeetCode - Decode Ways | Darren's Blog

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts