报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: "1"
示例 2:
输入: 4
输出: "1211"
//方法一
func countAndSay(n int) string {
if n == 1 {
return "1"
}
result := "1"
for i := 2; i <= n; i++ {
bt := ""
count := 0
for j := 0; j < len(result); j++ {
if j+1 < len(result) && result[j] == result[j+1] {
count++
continue
} else {
count++
itoa := strconv.Itoa(count)
// fmt.Println(itoa)
//fmt.Println(string(result[j]))
bt = fmt.Sprint(bt,itoa, string(result[j]))
count = 0
}
}
result = bt
}
return result
}
//方法二
func countAndSay1(n int) string {
res := "1"
for i := 0; i < n - 1; i++ {
tmp := ""
cnt := 1
last := rune(res[0])
for _, c := range res[1:] {
if c != last {
tmp += strconv.Itoa(cnt) + string(last)
cnt = 1
last = c
} else {
cnt ++
}
}
tmp += strconv.Itoa(cnt) + string(last)
res = tmp
}
return res
}