|
@@ -0,0 +1,64 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "strconv"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ var n int
|
|
|
+
|
|
|
+ n = 3
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 2
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 3
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 4
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 5
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 6
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 7
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+
|
|
|
+ n = 8
|
|
|
+ fmt.Println(countAndSay(n))
|
|
|
+}
|
|
|
+
|
|
|
+func countAndSay(n int) string {
|
|
|
+ if _, ok := store[n]; !ok {
|
|
|
+ for i := 2; i <= n; i++ {
|
|
|
+ store[i] = findSaying(store[i-1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return store[n]
|
|
|
+}
|
|
|
+
|
|
|
+var store = map[int]string{
|
|
|
+ 1: "1",
|
|
|
+}
|
|
|
+
|
|
|
+func findSaying(s string) string {
|
|
|
+ var count int
|
|
|
+ var cursor = len(s) - 1
|
|
|
+ var res string
|
|
|
+ for i := len(s) - 1; i >= 0; i-- {
|
|
|
+ if s[i] == s[cursor] {
|
|
|
+ count++
|
|
|
+ } else {
|
|
|
+ res = strconv.FormatInt(int64(count), 10) + s[cursor:cursor+1] + res
|
|
|
+ count = 1
|
|
|
+ cursor = i
|
|
|
+ }
|
|
|
+ }
|
|
|
+ res = strconv.FormatInt(int64(count), 10) + s[cursor:cursor+1] + res
|
|
|
+ return res
|
|
|
+}
|