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
}