038.报数 Count and Say

Description easy

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221 

1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

说明: 整数顺序将表示为一个字符串。

Example
输入: 1
输出: "1"

输入: 4
输出: "1211"
Solution
func countAndSay(n int) string {
    if n == 0 {
        return ""
    }
    if n == 1 {
        return strconv.Itoa(1)
    }
    result := "1"
    for i := 0 ;i < n-1 ;i ++ {
        result = say(result)
    }
    return result
}

func say(str string)string  {
    if str == ""{
        return ""
    }
    var list []byte
    count := 0
    for i := range str{
        if len(list) != 0 && str[i] == list[len(list)-1]{
            count++
            list[len(list)-2] = byte(count + 48)
        }else {
            count = 1
            list = append(list,  byte(count+ 48))
            list = append(list,str[i])
        }
    }
    return string(list)
}

leetCode地址