> For the complete documentation index, see [llms.txt](https://hao-fu-1.gitbook.io/oj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hao-fu-1.gitbook.io/oj/string/count-and-say.md).

# Count and Say

<https://leetcode.com/problems/count-and-say/description/>

> 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, generate the nth term 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"

## Thoughts

题目意思是把上个生成的string 一个个数字数, 然后把count和对应的digit连起来. 比如1211, 读作1个1,1个2,2个1, 因此新的是111221. 所以我们对每个数字计数即可.

## Code

```
class Solution {
    public String countAndSay(int n) {
        if (n == 0) {
            return "0";
        }
        String res = "1";
        for (int i = 2; i <= n; i++) {
            int count = 0;
            StringBuilder sb = new StringBuilder();
            char c = '\0';
            for (int j = 0; j < res.length(); j++) {
                c = res.charAt(j);
                if (j > 0 && c != res.charAt(j - 1)) {
                    sb.append(count + "" + res.charAt(j - 1));
                    count = 0;
                }
                count++;
            }
            sb.append(count + "" + c);
            res = sb.toString();
            System.out.println(res);
        }
        return res;
    }
}
```

## Analysis

时间复杂度O(N).
