38. 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
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 where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.app

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

Example 1:
Input: 1
Output: "1"

Example 2:
Input: 4
Output: "1211"

難度:easyui

題目:
count-and-say 序列以下如示:code

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 讀做1個1或11
11 讀做2個1或21
21 讀做1個2,接着1個1 或1211

給定一個整數n 大於等於1小於等於30, 產生第n組序列。
注意:每項由整數組成的序列以字符串表示。字符串

Runtime: 3 ms, faster than 72.13% of Java online submissions for Count and Say.
Memory Usage: 25.8 MB, less than 98.33% of Java online submissions for Count and Say.string

class Solution {
    public String countAndSay(int n) {
        String str = "";
        for (int i = 0; i < n; i++) {
            str = generateNext(str);
        }
        
        return str;
    }
    
    private String generateNext(String s) {
        if (s.isEmpty()) {
            return "1";
        }
        // add and end flag
        s += ".";
        int counter = 1;
        StringBuilder str = new StringBuilder();
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) != s.charAt(i - 1)) {
                str.append(counter).append(s.charAt(i - 1));
                counter = 1;
            } else {
                counter++;
            }
        }
        
        return str.toString();
    }
}
相關文章
相關標籤/搜索