Count and Say

The count-and-say sequence is the sequence of integers with the first five terms as following:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1is read off as"one 1"or11. 11is read off as"two 1s"or21. 21is read off as"one 2, thenone 1"or1211.

Given an integern, generate thenthterm of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

Example 1:

Input: 1
Output: "1"

Example 2:

Input: 4
Output: "1211"

Solution

class Solution {
    // 1 -> 11 -> 21 -> 1211 -> 111221 -> 312211 -> 1311...
    // count all numbers until they are the same, then write how many of the same nunbers you got
    // create loop fro 0 to n-1
    // express the current value of 1 -> look at the number and check the next number -> if not, write how many times you got this number
    public String countAndSay(int n) {
        StringBuilder init = new StringBuilder();
        init.append(1);
        if (n == 1) {
            return init.toString();
        }

        String result = "";
        for (int i = 0; i < n - 1; i++) {
            String newItem = generate(init);
            init = new StringBuilder(newItem);
            result = init.toString();
        }
        return result;
    }

    public String generate(StringBuilder builder) {
        StringBuilder newSequence = new StringBuilder();
        String s = builder.toString();
        int howManyTimes = 1;
        for (int i = 0; i < s.length(); i++) {
            char current = s.charAt(i);
            char next = ' ';
            if (i + 1 < s.length()) {
                next = s.charAt(i + 1);
            }
            if (current == next) {
                howManyTimes++;
            } else {
                // write how many times & what
                newSequence.append(howManyTimes);
                newSequence.append(current);
                howManyTimes = 1;
            }
        }
        return newSequence.toString();
    }
}

Last updated