描述数字

func countLastOne(s string) string {
    type kv struct {
        key string
        value int
    }

    var count []kv
    pk := ""
    for i := range s {
        if pk == s[i:i+1]{
            count[len(count)-1].value = count[len(count)-1].value + 1
        } else {
            count = append(count , kv{
                key : s[i:i+1],
                value: 1,
            })
        }

        pk = s[i:i+1]
    }

    res := ""
    for i := 0; i < len(count); i++ {
        if count[i].key != "" && count[i].value != 0{
            res = fmt.Sprintf("%v%v%v", res, count[i].value, count[i].key)
        }
    }

    return res
}


func countAndSay(n int) string {
    if n == 1{
        return "1"
    } else {
        return countLastOne(countAndSay(n-1))
    }
}

这题要注意:

  1. 递归
  2. 普通的 map 没顺序,所以自己写一个 []kv 保存数据
  3. count 在前
  4. key : s[i:i+1] 简单处理