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

  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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        seq = "1"
        for i in range(n-1):#循环的n-1次就可以了  .如果一开始就是1那么就输出本身没有进入循环
            seq = self.getNext(seq)  #循环获取的是下一个字符串
        return seq

    def getNext(self,seq):
        i,next_seq = 0,""  #i循环结束的标志,要遍历整个的字符串  比如现在的是1211   #还需要注意的是这里的i跟上面的i还是不一样的.
        while i < len(seq):
            count = 1 #一开始传进来的count肯定是最少是1
            while i < len(seq)-1 and seq[i] == seq[i+1]:  #这个就是遍历 ,这里的i<len(seq)-1 是因为后面的判断,如果最后只剩下一个元素就不用进这个循环了       
                count +=1
                print(count)
                i+=1
            next_seq +=str(count) + seq[i]
            i+=1  #这里的i+1是因为要跳转到下一个不同元素的索引
        return next_seq

思想就是递归的将上一个sequence传递下去,然后进行遍历

对相同的元素进行计数,最后使用字符串的相加,然后将count再归一继续进行遍历.最终传递到想要的第几个报数