LeetCode 38. 报数 (python)

题目链接

题目描述:

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

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

猜你喜欢

转载自blog.csdn.net/weixin_44740082/article/details/89339762