[LeetCode By Python]38. Count and Say

本文介绍了一种称为“计数读数”序列的生成方法,并通过Python代码实现了该序列的第n项。序列从'1'开始,后续每一项都是前一项的描述。例如,'11'描述为'21',表示两个1;'21'描述为'1211',表示一个2和一个1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

The count-and-say sequence is the sequence of integers with the first five terms as following:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 is read off as "one 1" or 11.
11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generate the nth term of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

Example 1:

Input: 1
Output: "1"

Example 2:

Input: 4
Output: "1211"

当时看到这个题目有点懵,不懂题目想表达什么?

其实很简单,这个结构很迭代啊,就是输入‘1’,输出‘11’,‘11’第一个1表示个数,第二个1表示‘1’,就是说有1个字符1,输入‘1211’,输出‘111221’,表示有1个1,1个2,2个1

现在上代码+调试:(之前有点不懂,借鉴了其他博主)

class Solution(object):
    def countAndSayF(self,s):
        count = 0
        ans = ''
        tmp = s[0]
        for n in range(len(s)):
            if s[n]==tmp:
                count+=1
            else:
                ans += str(count)+tmp
                tmp = s[n]     
                count = 1
        ans += str(count)+tmp
        return ans

    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        ans = '1'
        while n>1:
            ans = self.countAndSayF(ans)
            n-=1
        return ans

a = Solution()
print a.countAndSay(5)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值