外观数列
https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/
https://leetcode-cn.com/problems/count-and-say/
顺带一提,从今天开始用 Golang 刷题,以便掌握算法的同时熟悉语言特性。
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| func countAndSay(n int) string { if n == 1 { return "1" }
str := countAndSay(n - 1)
var sb strings.Builder for start, end := 0, 0; start < len(str); start = end { for end < len(str) && str[end] == str[start] { end++ } sb.WriteString(strconv.Itoa(end - start)) sb.WriteByte(str[start]) }
return sb.String() }
|
Note of Golang
- 用
strings.Builder
来拼接字符串,因为如果使用 +=
运算符的话会在不停分配新的内存导致效率变低。
- Golang 中变量可以平行赋值,先计算等式右边的值,然后从左到右依次赋值。