> For the complete documentation index, see [llms.txt](https://frost.gitbook.io/iosbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://frost.gitbook.io/iosbook/leet-code/leetcode-solutions/untitled-7.md).

# \[LeetCode] 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`.<br>

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"
```

**Analyse:**

​

**Solution:**

```swift
class Solution {
    func countAndSay(_ n: Int) -> String {
        var res: String = "1";
        
        if(n < 2) {
            return res;
        }
        
        for i in 2...n {
            res =  self.handler(output: res);
        }

        return res;
    }
    
    func handler(output: String) -> String {
        let chars = Array(output);
        
        var text = "";
        var count = 0;
        var current:Character = "a";
        
        for i in 0..<chars.count {
            let char = chars[i];
            
            if(char == current) {
                count += 1;
            }
            else {
                if(count != 0) {
                    text = "\(text)\(count)\(current)";
                }
                current = char;
                count = 1;
            }
        }
        
        if(count != 0) {
           text = "\(text)\(count)\(current)";
        }
        
       return text;
    }
}
```
