描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
-
1 -
11 -
21 -
1211 -
111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
分析
乍一看挺奇怪的
但其实就是看上一个字符串,有几个连续的数字几
比如第4个是1211
是 “1” 个连续的 “1”, “1” 个连续的 “2”,“2” 个连续的 “1”
将引号部分的数字合起来就是 111221
看懂题目在做就很简单了
代码
def countAndSay(self, n: int) -> str:
ans = []
for i in range(35):
ans.append("")
ans[1] = "1"
ans[2] = "11"
ans[3] = "21"
for i in range(4, 31):
thisone = ans[i - 1]
conti = 1
c = thisone[0]
ne = ""
for j in range(1, len(thisone)):
if thisone[j] == c:
conti += 1
continue
else:
ne = ne + str(conti) + c
c = thisone[j]
conti = 1
ne = ne + str(conti) + c
ans[i] = ne
return ans[n]

本文介绍了一个有趣的数列生成算法——报数序列,并提供了一个简洁的Python实现方案。通过解析序列生成规则,文章详细解释了如何从一个初始数字开始,逐步构建出后续每一项的计算逻辑。

被折叠的 条评论
为什么被折叠?



