Count and Say

#1

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.

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

#2

The problem description is little ambiguous, but looking at the example gives some idea on what to do. Whenever we say a group consecutive digits, we count them together and append them to the result with the number first and then the actual digit. We do this repeatedly until `n`.

``````func countAndSay(n int) string {
var result strings.Builder
s1 := "1"
if n<=1{
return s1
}

t := s1
var j int
for i:=2;i<=n;i++{
for j=0;j<len(t);j++{
count := 1
ts := t[j]
for j<len(t)-1 && t[j]==t[j+1]{
count++
j++
}
result.WriteString(strconv.Itoa(count)+string(ts))
}
t = result.String()
result.Reset()
}

return t
}
``````