LeetCode - Count and Say | Darren's Blog



The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221, ...
1 is read off as "one 1" or 11.
11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.
Given an integer n, generate the n-th sequence.
Note: The sequence of integers will be represented as a string.
public String countAndSay(int n) {
        if (n < 0)
            return "";
        // Go n-1 steps starting from the first integer "1"
        String result = "1";
        for (int i = 1; i < n; i++) {
            // StringBuilder: a mutable sequence of characters similar to StringBuffer
            // but with no guarantee of synchronization; recommended for most cases
            StringBuilder builder = new StringBuilder();
            int count = 1;      // The number of appearances of the same digit
            for (int j = 1; j < result.length(); j++) {
                if (result.charAt(j) == result.charAt(j-1)) {   // Same as the preceding digit
                    count++;
                } else {        // A different digit
                    builder.append(count);      // Append the count of appearances of the character
                    builder.append(result.charAt(j-1));     // Append the character itself
                    count = 1;      // Reset count
                }
            }
            // The last digit and its count of appearances have not been included in builder
            builder.append(count);
            builder.append(result.charAt(result.length()-1));
            // Get the next integer in the sequence
            result = builder.toString();
        }
        // Out of loop; we arrive at the n-th integer
        return result;
    }
Read full article from LeetCode - Count and Say | 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