报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
链接:https://leetcode-cn.com/problems/count-and-say
我把序列的递推规则定义成了函数,看起来更好理解,写成两层循环也是一样的。
class Solution:
def countAndSay(self, n: int) -> str:
def ditui(mystr):
resstr = ''
counts = 1
for i in range(len(mystr)-1):
if mystr[i+1] != mystr[i]:
resstr += (str(counts)+mystr[i])
counts = 1
else:
counts += 1
resstr += (str(counts)+mystr[-1])
return resstr
mystr = '1'
for i in range(n-1):
mystr = ditui(mystr)
return mystr