题目描述:
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
题意:
每一个数是对上一个数进行报数比如
第一个数是1,第二个数对第一个数1报数,为1个1即11
第三个数对第二个数11进行报数,为两个1即21
第四个数对第三个数进行报数,为一个2一个1即1211
以此类推
解题思路:
遍历每一个数字,记录当前重复数字的个数,将出现次数与该数字一同添加到结果中
class Solution:
def countAndSay(self, n: int) -> str:
res='1'
for i in range(2,n+1):
pre=res
res=''
p=0#索引
flag=pre[0]#当前在计数的数字
count=0#记录当前出现的数字的次数
while p<len(pre):
if pre[p]==flag:
count+=1
p+=1
else:
res+=str(count)+pre[p-1]
flag=pre[p]#更换当前计数的数字
count=1#更新当前计数数字出现的次数
p+=1
res+=str(count)+pre[p-1]#最后一次计数的数字
#rint(res)
return res