报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
- 1
- 11
- 21
- 1211
- 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再归一继续进行遍历.最终传递到想要的第几个报数