| 123456789101112131415161718192021222324252627282930 |
- package main
- import (
- "strings"
- "fmt"
- "math"
- )
- // iterator of countAndSay function
- func casIter(last string, n int) string {
- if n == 1 { return last }
- next := make([]rune, 0)
- curr := last[0]
- cnt := 1
- for i := 1; i < len(last); i++ {
- if curr != last[i] {
- next = append(next, rune(cnt + '0'), rune(curr))
- curr = last[i]
- cnt = 1
- } else {
- cnt++
- }
- }
- next = append(next, rune(cnt + '0'), rune(curr))
- return casIter(string(next), n - 1)
- }
- func countAndSay(n int) string {
- return casIter("1", n)
- }
|