• 38. 外观数列


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

  • 相关阅读:
    解决VS2005 远程工具无法通过同步软件连接S5pv210 样机的问题
    java.util.concurrent 多线程框架线程池编程(三)
    线程池java.util.concurrent 多线程框架(二)
    java.util.concurrent 多线程框架线程池编程(一)
    java.util.concurrent 多线程框架线程池编程(四)
    Box2D学习笔记(2)
    Box2D学习笔记(1)
    ASP.NET页面防止刷新
    C#中跨数据库增删改的事务控制
    .NET(C#)开源代码分析
  • 原文地址:https://www.cnblogs.com/llb123/p/13398742.html
Copyright © 2020-2023  润新知