外观数列

外观数列

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 中变量可以平行赋值,先计算等式右边的值,然后从左到右依次赋值。