package main // 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) }