38.外观不等式

原创
小哥 3年前 (2022-11-16) 阅读数 7 #大杂烩

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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”

执行用时 :84 ms, 在所有 Python3 提交中击败了15.00% 的用户
内存消耗 :13.9 MB, 在所有 Python3 提交中击败了5.00%的用户

首先先理解题,输入的整型数字都是上一个的读作的数,输入整型n,遍历(n-1),输出字符串
6,3个1,2个2,1个1 即312211
7,1个3,1个1,2个2,2个1 即13112221
8,1个1,1个3,2个1,3个2,1个1 即1113213211
…(1<=n<=30)

根据思路一点一点来,输出字符串string1=‘1’,从‘1’开始

class Solution:
    def countAndSay(self, n: int) -> str:
        #输出字符串string1=1,从‘1’开始
        string1 = 1 
        #首先先理解题,输入的整型数字都是上一个的读作的数,输入整型n,遍历(n-1),输出字符串
        for i in range(n - 1):            
            #首先将指针指向string1的第一项,赋值给a
            a = string1[0]
            #count用来计数,每一次循环都是从0开始计数
            count = 0  
            #形成新的字符串string2,在这个循环的末端将string2赋值给string1,最后输出i=n-1时string1的值
            string2 = 
            #用b遍历string1的每一项
            for b in string1:
                #存在两种情况,第一种情况是a和string1[0]相等,count自加一,连续相等几次,count自加一几次
                if a == b:                    
                    count += 1 
                #不等时,连续中断, 形成新的字符串string2,相当于count个a,count转换成字符串可直接相加
                else:                    
                    string2 += str(count) + a
                    #将指针指向string1的新一项,赋值给a,内循环重新开始
                    a = b 
                    #count至少为1,所以从1开始,内循环重新开始
                    count = 1
            #当前的整数,遍历上一个字符串完了,形成新的字符串string2,相当于count个a,count转换成字符串可直接相加
            string2 += str(count) + a            
            string1 = string2 
        #输出字符串string1
        return string1

算法题目来自:https://leetcode-cn.com/problems/count-and-say/

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除