38.报数

版权声明:随意取用(´・ω・`) / https://blog.csdn.net/square_zou/article/details/84071635

Problem

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

  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”

too young 思路

题我是看懂了,我甚至想把这30个手动都给写出来,不然真不知道要怎么写,递归吗?把第一个输入之后每个按照前一个来计算?

dalao 思路-24ms

找了一个和我too young思路差不多的大佬代码

class Solution(object):
    def countAndSay(self, n):
        s = '1'   #初始化第一个数字    
        for i in range(n-1):  #n-1个数      
            temp = ''   #一个空数列
            num = s[0]  #s的第一位数字
            count = 0    #当前数字的个数
            
            for j in s:   #遍历s中的每个字母
                if num == j:     #如果这个字母和num一样
                    count += 1     #计数+1
                else:
                    temp += str(count)+str(num)  #存下“几”个“什么数”
                    num = j   #num改成当前数字
                    count = 1   #计数回到1
            temp += str(count)+str(num)  #加的是最后一个
            s = temp
        return s

猜你喜欢

转载自blog.csdn.net/square_zou/article/details/84071635